在foreach循环中获取主干模型
fetch backbone model inside a foreach loop
this.shipperModel = new shipperModel();
this.collection = new packetListCollection(this.options.packetData);
this.listenTo(this.collection, "change", this.render);
this.listenTo(this.collection, "add", this.render);
this.finalArry = [];
self.collection.each(function (modelData) {
self.shipperModel.fetch({
data: {
facility_id: modelData.facility_id ? modelData.facility_id : 0
}
}).then(function (response) {
console.log(response.records);
self.finalArry.push(response.records);
})
});
console.log(self.finalArry);
我的数组总是作为空白,即使有数据在响应中,我如何确保结果得到显示,只有在所有上述提取完成后。
这是因为您在then()
闭包之外记录数组。
this.finalArry = [];
self.collection.each(function (modelData) {
self.model.fetch({
data: {
facility_id: modelData.facility_id ? modelData.facility_id : 0
}
})
.then(function (response) {
console.log(response.records);
self.finalArry.push(response.records);
console.log(self.finalArry);
});
});
fetch()
是一个异步方法,所以你原来的console.log()
在任何网络调用成功之前触发。
Oscar Linde的回答是值得注意的——这可能不是你想要的初始数据水合化方式。
完全重新获取整个集合而不是重新获取每个模型不是更好吗?
无论如何,回到原来的问题,你正在寻找的是javascript的承诺。我想如果我要在评论中解释它,可能会有点令人困惑。也许你可以看看https://api.jquery.com/category/deferred-object/或只是谷歌javascript承诺,我相信你会找到一些东西。
也许这就是你要找的(未经测试):
var requests = [],
self = this;
this.finalArry = [];
self.collection.each(function (modelData) {
// Push all requests wrapped in a function into an array
requests.push(function () {
return self.model.fetch({
data: {
facility_id: modelData.facility_id ? modelData.facility_id : 0
}
}).then(function (response) {
console.log(response.records);
self.finalArry.push(response.records);
});
});
});
// Run all requests and map the return value(a promise)
requests = _.map(requests, function (req) {
return req();
});
// When all requests are done, log
$.when.apply($, requests).then(function (response) {
console.log(self.finalArry);
});
至少我不建议使用async: false
,它会导致糟糕的用户体验。
相关文章:
- 如何使用backbone.js从集合中获取模型名称
- 主干-从模板中迭代的集合中获取特定的模型
- 无法在mvc视图中使用ajax调用获取操作返回的模型对象列表
- Ember.js-获取DOM元素的模型数据
- 使用 ng 模型获取数据时遇到问题
- 如何将数据从模型获取到JavaScriptMVC4
- 如何在模型获取完所有信息后才将其传递给视图's数据
- 挖空,映射后从视图模型获取 JSON
- 从视图中的模型获取属性的主干
- 为什么当我将数据选项添加到骨干模型获取时,它不会触发回调
- 如何在角度.js中使用ng模型获取按钮文本
- 主干模型获取属性函数返回上次更新的值
- 将数据从模型获取到视图
- 如何使用AngularJS中的ng模型获取复选框值(由用户检查)
- 使用dom模型获取和设置html标签的值
- 未从$scope模型获取AngularJS指令中的数据
- Backbonejs:模型获取意味着模型未“刷新”
- 骨架模型.获取非设置值
- Sharepoint 2010客户端对象模型-获取当前列表的名称
- 重写Backbonejs模型获取函数