我正在使用backbone的fetch()来获取我的集合。由于这需要花费大量时间并且会频繁过滤,因此无需多次 fetch() 。我正在尝试这样做:
if(!App.fetch){
App.fetch = new App.Collection.Artists();
App.fetch.fetch()
}
var c = _.filter(App.fetch.models, function(model){
return model.get('date') == day && model.get('stage') == stage
});
var c = new App.Collection.Artists(c);
我认为我正在做的事情:如果没有缓存的集合,则创建一个并获取它。我将能够使用具有不同“day”和“stage”值的此函数来过滤 App.fetch,它仅填充一次并且不会再次触及。
当我在集合上记录 on.('change') 事件时,我会触发更改事件。我的猜测是过滤器方法触发了更改事件,结果是它只在第一次起作用!
我的问题是为什么这不是我想的那样以及我将如何解决这个问题。
编辑:问题是第二次调用此函数时,我向集合“c”返回 0 个模型。
此致,简
最佳答案
您正在以同步方式处理异步调用。尝试这样的事情,根据需要调整变量范围:
App.fetch({
success: function() {
var c = _.filter(App.fetch.models, function(model){
return model.get('date') == day && model.get('stage') == stage
});
var c = new App.Collection.Artists(c);
}
});
关于javascript - 下划线: Losing reference to collection when filtering,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24084647/