这个应该很简单,但不是,它让我很头疼。骨干视图collection.each()bug?
我复制/粘贴一个相当简单的“Hello骨干”的代码,并简化了它多一些,得到这个:
(function($){
var Item = Backbone.Model.extend({
defaults: {
part1: 'hello',
part2: 'world'
},
initialize: function() {
//console.log("initialize item");
}
});
var List = Backbone.Collection.extend({
model: Item,
initialize: function() {
//console.log("initialize list");
}
});
var ListView = Backbone.View.extend({
//el: $('body'), // el attaches to existing element
initialize: function(){
_.bindAll(this, 'render'); // every function that uses 'this' as the current object should be in here
this.collection = new List();
this.render();
},
render: function(){
//console.log("listview render");
},
});
var listView = new ListView();
var item1 = new Item();
listView.collection.add(item1);
console.dir("Emptying collection...");
listView.collection.each(function (item) {
console.dir("Removing model cid:" + item.cid);
listView.collection.remove(item);
})
var item2 = new Item();
listView.collection.add(item2);
var item3 = new Item();
listView.collection.add(item3);
console.dir("Emptying collection...");
listView.collection.each(function (item) {
console.dir("Removing model cid:" + item.cid);
listView.collection.remove(item);
})
console.log(listView.collection.length);
})(jQuery);
第一部分实际上是一些骨干样板东西,最后一个应该:
- 一个模型添加到收藏
- 明确收集
- 两款车型添加到收藏
- 明确收集
最后,listView.collection.length
应该是0,但它不是。 还有一个模型。
我从控制台日志中看到了什么,该listView.collection.each(function (item) { ... })
没有做它应该做的事情,因为只有一个项目在第二收集迭代删除,而不是项目。
那么,我做错了什么或有什么地方有bug?
更新:这里的jsfiddle
第一件错误的是你的小提琴。它没有建立依赖关系。 –
@StephenThomas查找外部资源。有jQuery,Underscore和Backbone。也许有一些我错过了? – OzrenTkalcecKrznaric
啊对。错过了他们 –