我想要实现的是PopUpView只有在保存所有模型后才被调用。
运行代码时,弹出视图会在保存完成之前运行。
var promises = []
_.each(exampleModels, _.bind(function (resource) {
var filter = this.resources.get(resource.id);
filter.fetch(
{
success: function (model, response) {
var participant = new Model({
example: "text"
});
promises.push(participant.save());
}
});
}, this));
$.when.apply($, promises).then(_.bind(function () {
var popupForm = new PopUpView({
});
this.$el.append(popupForm.$el);
}, this));
答案 0 :(得分:1)
问题是fetch
也是异步的。因此,当您点击$.when.apply(...
行时,promises
是一个空数组。因此when
返回的承诺会直接触发then
。
答案 1 :(得分:1)
model.fetch
和model.save
then
return a new promise 1 你可以像这样构建你的承诺数组
var promises = _(ids).chain()
.map(function(id) {
// get the models you want
return c.get(id);
})
.map(function(model) { // build a promise for each model
return model.fetch(). // promise returned by fetch
then(function(resp) {
var participant = new M({
example: "text"
});
return participant.save(); // promise returned by save
});
})
.value();
$.when.apply($, promises).then(function() {
console.log('done');
});
演示http://jsfiddle.net/nikoshr/du44m1ha/
1 自jQuery 1.8以来