Backbonejs を使用して ul に li を追加および削除するための小さなアプリを作成していました。SO メンバーの cymen の 1 人がコーディングを手伝ってくれました。 2回目に要素を(ulに)追加して削除すると、取得します
Uncaught TypeError: undefined のメソッド 'remove' を呼び出せません
ここに私のコードを貼り付けて、
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()});
});
私が理解していなかった2つのこと:
i) removeFoo 関数で、次のように記述します。
this.model.collection.remove(this.model)
これは this.collection.model.remove 、そのようなものであるべきではありませんか?
ii) ul に li を追加し、それを削除します。別の li を追加すると (ul への追加は完璧に機能します)、今回は削除しようとすると上記のエラーがスローされます: Uncaught TypeError : cannot call method 'remove'未定義の
私のコードでこれらの2つの疑問を理解するのを手伝ってもらえますか.ところで、SOメンバーのcymenのコードは、私の調整されたコード(上記)だけが私にエラーを与えているだけです.
SO メンバー cymen のコード :彼のコードの JS Fiddle
ありがとうございました