我正在构建一个小应用程序,用于使用 Backbonejs 从 ul 添加和删除 li。其中一个 SO 成员 cymen 帮助我编写了代码,使用它我稍微定制了代码。目前,如果我添加一个元素并删除,它可以工作,但是第二次我添加一个元素(到 ul)并删除它,我得到
未捕获的类型错误:无法调用未定义的方法“删除”
在这里粘贴我的代码,
HTML:
<input type="text" id="name">
<button id="add">Add</button>
<ul id="mylist"></ul>
JS:
$(function(){
var myCollection = Backbone.Collection.extend();
var myView = Backbone.View.extend({
el:$('body'),
tagName:'li',
initialize : function(e){
this.collection.bind("add",this.render,this);
this.collection.bind("remove",this.render,this);
},
events:{
'click #add' : 'addfoo'
},
addfoo : function(){
var myname= $('#name').val();
$('#name').val('');
this.collection.add({name:myname});
},
render : function(){
$('#mylist').empty();
this.collection.each(function(model){
console.log("myView");
var remove = new myRemoveView({model:model});
remove.render();
});
}
});
var myRemoveView = Backbone.View.extend({
el:$('body'),
events:{
'click .button':'removeFoo'
},
removeFoo : function(){
console.log("here");
this.model.collection.remove(this.model);
},
render : function(){
console.log("second view");
$('#mylist').append('<li>'+this.model.get('name') + "<button class='button'>"+"delete"+"</button></li>");
return;
}
});
var view = new myView({collection: new myCollection()});
});
我不明白的两件事:
i) 在 removeFoo 函数中,我们写
this.model.collection.remove(this.model)
这不应该是 this.collection.model.remove 之类的吗?
ii)我向 ul 添加一个 li,然后删除它,当我添加另一个 li 时(附加到 ul 完美)但是这次当我去删除它时会抛出上述错误:Uncaught TypeError:无法调用方法'remove'未定义的
你能帮我弄清楚我的代码中的这两个疑问吗,顺便说一句,SO 成员 cymen 的代码就像一个魅力,只有我定制的代码(上面)给了我错误。
SO 成员 cymen 的代码:JS Fiddle 的代码
谢谢