我在使用backbone.js时遇到了一些问题。虽然我的所有代码都有效,但我确实得到了一个例外:
TypeError: 'undefined' is not an object (evaluating '(e=this.models[c]).cid')
。
当模型数量超过限制时会发生异常,我在集合中调用self.remove()。
var Column = Backbone.Collection.extend({
initialize: function(col) {
var view = new ColumnView({
id: "column_" + col.id,
column: col
});
view.render();
},
comparator: function(tweet) {
return tweet.get('created_at_time');
},
clean: function() {
var self = this;
var total = this.models.length;
var threshold = (total - window.config.threshold) - 1;
if(threshold > 0) {
console.log("Removing if tweet is older then " + threshold);
this.models.forEach(function(tweet, index) {
if(index < threshold) {
self.remove(tweet);
}
});
}
}
});
有谁知道发生了什么?在safari上发生错误。
答案 0 :(得分:1)
据猜测,这是因为您在迭代模型列表时删除模型这一事实。
尝试
if (threshold > 0) {
var removed = [];
this.models.forEach(function (tweet, index) {
if (index < threshold) {
removed.push(tweet);
}
});
this.remove(removed);
}
或@mu
建议的变体if (threshold > 0) {
var removed = this.filter(function(model, index) {
return index < threshold;
});
this.remove(removed);
}
或者在你的情况下可能更简单
if (threshold > 0) {
this.remove(this.models.slice(0, threshold));
}