我在选定的月份中生成日期列表,对于每个日期,我都会进行Backbone.Collection
提取。
这是我一个月中每个日期的循环播放方式
for (var i = 1; i <= numOfDays; i++) {
var d = i < 10 ? '0'+i:i;
var v = new View({
dt: this.year + this.month + (d),
param: this.array
});
this.$el.append(v.render().el);
}
如您在上方看到的,每个视图(backbone.view
)都将代表date
和param object
。然后我在param
调用render()时使用UnderscoreJs _.each
方法循环对象
_.each(this.param, this.reading, this);
然后它将启动一个新对象backbone.collection
并立即执行抓取。
reading: function (value, key) {
var _this = this;
this.fetchData(new Data.Collection(), '/api/ + value.ipid').done(function(coll) {
var input = $('<input>').val(value.ipid).attr('data-inid', coll.first().get('in_id'));
_this.$el.append(input);
});
}
我单独一个函数this.fetchData
这样
fetchData: function (obj, url) {
var deferred = $.Deferred(),
collection = obj;
collection.url = url;
var xhr = collection.fetch().done(function(data, textStatus, jqXHR) {
deferred.resolve(collection, data, textStatus, jqXHR);
}).fail(deferred.reject);
var promise = deferred.promise();
promise.abort = _.bind(xhr.abort, xhr);
return promise;
}
不幸的是,对于每个视图,对象内部项目的顺序param
都会改变,因为它取决于的竞争条件backbone.ajax
。让我们看看param
对象的项目
[{ipid: 44, measure: "cumec"},{ipid: 45, measure: "meter"},{ipid: 46, measure: "milimeter"}{ipid: 47, measure: "cumec"}]
对象项的顺序正确。44、45、46和47。但是要在初次通过时获得列表,将在获取操作后发生变化。
我该如何告诉bonesjs或underscorejs在开始循环param
对象内的另一个项目之前等待每个提取操作完成
我只希望循环(_.each)等待提取操作完成后再继续循环
希望有人能启发实现这一目标的方法。谢谢你,有一个美好的一天
如果在视图创建时(即在reading
函数内部)创建并附加DOM元素,则从done回调内部进行引用,这些元素的顺序将与param数组内部的顺序相同。
旁注:您可以collection
直接使用url实例化,而无需将另一个jQuery Prom包装在fetch返回的Prom周围。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句