我有一个有两个功能的模型 - 一个帖子,一个得到。
获取:
fetch: function (options) {
var self = this;
return P1Comm.get({
'dataType': 'json',
'processAjaxResponse': self.processAjaxResponse,
'onStatusInvalid': function (e) {
P1.log(e, 'status');
},
'onSuccess': options.success,
'onError': function (e) {
P1.log(e);
},
'sourceURL': P1.API_APPS_ROOT + 'v1.0/accepted-terms'
});
},
帖子:
acceptTerms: function (appId) {
var self = this;
self.set({
'app_id': parseInt(appId,10)
});
self.createEdit(self.toJSON(), {
}).pipe(function () {
var def = $.Deferred();
var saveOpts = {
dataType: 'json',
stringify: true,
contentType: 'application/json',
processData: false,
processAjaxResponse: self.processAjaxResponse
};
self.save(self.toJSON(), saveOpts);
return def.promise();
});
},
从视图中调用帖子:acceptAppTerms.acceptTerms(1);
这两者都有自己的作用,但我想改变它,以便:
- 发布POST acceptTerms()
- 然后进行GET fetch()
- 然后调用另一个函数
我认为会是这样的(至少前两点):
acceptAppTerms.acceptTerms(id).then(function () {
this.launchApp(event, id);
});
但我收到了Uncaught TypeError: Cannot read property 'then' of undefined
我在前端并不擅长 - 有人能指出我正确的方向吗?
由于
更新:
fetchAcceptedTerms: function () {
var self = this;
this.appAcceptedTerms = new T1AppAcceptedTerms();
this.acceptedTerms = new AppAcceptedTerms();
this.acceptedTerms.fetch({
success: function (data) {
if (data.meta.status === 'success') {
self.appAcceptedTerms.set(data.data);
}
}
});
},
下面的示例有效,但它会将数据设置中断到模型中。
答案 0 :(得分:1)
您收到错误的原因是因为acceptTerms
没有返回任何内容,换句话说返回undefined
没有then()
方法。
您的代码应该是:
fetch: function(options) {
var self = this;
return P1Comm.get({
dataType: 'json',
processAjaxResponse: self.processAjaxResponse,
onStatusInvalid: function(e) {
P1.log(e, 'status');
},
onSuccess: options.success,
onError: function(e) {
P1.log(e);
},
sourceURL: P1.API_APPS_ROOT + 'v1.0/accepted-terms'
});
},
acceptTerms: function(appId) {
var self = this;
self.set({
'app_id': parseInt(appId, 10)
});
return self.createEdit(self.toJSON(), {}).pipe(function() {
//---------------------------------------^ better use .then()
var saveOpts = {
dataType: 'json',
stringify: true,
contentType: 'application/json',
processData: false,
processAjaxResponse: self.processAjaxResponse
};
return self.save(self.toJSON(), saveOpts);
});
},
此代码asummes P1Comm.get
,self.createEdit
和self.save
返回一个promise对象。如果他们没有,那么你需要创建一个Deferred
对象并从这些函数中返回它的承诺。在其异步操作的成功/错误回调中,您需要resolve/reject
相应的承诺。