67 lines
2.3 KiB
JavaScript

import Ember from 'ember';
import $ from 'jquery'
export default Ember.Service.extend({
list(modelName, start, limit, params) {
var p = {
start: start,
limit: limit
};
if ($.type(params) === 'string') {
p.search = params;
}
else {
$.extend(true, p, params);
}
return this.ajaxGet(this._pathForType(modelName, '/list'), p);
},
find(modelName, params) {
return this.ajaxGet(this._pathForType(modelName, '/find'), params);
},
count(modelName) {
return this.ajaxGet(this._pathForType(modelName, '/count'));
},
create(modelName, model) {
return this.ajaxPost(this._pathForType(modelName, '/create'), model);
},
update(modelName, model) {
return this.ajaxPost(this._pathForType(modelName, '/update'), model);
},
del(modelName, model) {
return this.ajaxPost(this._pathForType(modelName, '/delete'), model);
},
modelAjaxGet: function(modelName, path, params) {
return this.ajaxGet(this._pathForType(modelName, path), params);
},
modelAjaxPost(modelName, path, params) {
return this.ajaxPost(this._pathForType(modelName, path), params);
},
ajaxGet(url, params) {
return this._ajax_request('doGet', url, params);
},
ajaxPost(url, params) {
return this._ajax_request('doPost', url, params);
},
_ajax_request(method, url, params) {
let me = this;
return new Ember.RSVP.Promise((resolve, reject) => {
let paramsType = $.type(params);
me.ajax[method ? method : 'doGet'](url,
paramsType === 'string' ||
paramsType === 'number' ?
{id: params} : params,
(data) => {
Ember.run(null, resolve, data);
}, (msg, r) => {
reject(msg);
me.dialog.error(msg || 'Ajax request erorr caused');
});
}, 'Ambition: Store#ajax request [' + url + ']');
},
_pathForType(modelName, path) {
return (/^[a-zA-Z_][a-zA-Z0-9_]+$/.test(modelName) ?
Ember.String.dasherize(modelName) : modelName) +
(/^\//.test(path) ? path : '/' + path);
}
});