我有2个独立的模型,由2个不同的API调用填充。我对它们逐一进行获取,一旦两个模型的API调用都完成了,我的视图也可用了(然后触发延迟解析),我就有了我的视图渲染逻辑,即向视图写入数据
下面是代码。
var myModel1 = new myModel1({
attr1: attr1
});
var myModel2 = new myModel2({
attr2: attr2
});
myModel1.fetch({
success: function() {
myModel1Deferred.resolve(myModel1);
}
});
myModel2.fetch({
success: function() {
myModel2Deferred.resolve(myModel2);
}
});
require(['view/my-view'], function(myView) {
myViewDeferred.resolve(myView);
});
$.when(myModel1Deferred, myModel2Deferred, myViewDeferred).then(function(myModel1, myModel2, myView) {
// My view rendering logic
}
现在的问题是,有2种不同的情况(基于视图的访问方式)。
我的问题是,我是否应该有一个if条件,然后写上 "如果"。$.when().then()
每个条件都单独处理,或者可以在一个单一的 $.then().when()
.
你可以 传递一个可变长度的数组给 $.when
借用 apply
. 类似
var promises = [
myViewDeferred,
myModel1Deferred
];
if (case#2)
promises.push(myModel2Deferred);
$.when.apply($, promises).then(function(view) {
view.render.apply(view, Array.prototype.slice.call(arguments, 1));
// view.render(model1, [model2, …]);
});
顺便说一下,与其说是 多次延期 你的 fetch
和 require
函数应该简单地返回承诺,而不是接受回调。