バックボーン.jsチュートリアルhttp://arturadib.com/hello-backbonejs/docs/5.htmlを読んでいる初心者のJavaScriptの人のようなもので、作成者が使用しているコードのいくつかについていくつか質問があります。
以下の初期化関数では、作成者がバインドします
this.model.bind('change', this.render);
this.model.bind('remove', this.unrender);
これはrender
、change関数が呼び出されるたびに関数が「this」オブジェクトで呼び出され、呼び出されるunrender
たびに実行されることを意味すると思いますremove
。私にとっての問題は、'remove'
彼のコードには定義された関数がありますが、定義された関数がないことです。'change'
質問: jquery関数change
をremove
参照してください。または、関数がjquery関数を参照しているときに、コードで定義されremove
ている関数を参照していますかremove
(つまり、jquery関数をオーバーライドします)change
。後者の場合、'change'
明示的に呼び出されることがなく、したがって関数が呼び出されない場合、関数を正確にトリガーするものは何render
ですか?
コード
var ItemView = Backbone.View.extend({
tagName: 'li', // name of tag to be created
events: {
'click span.swap': 'swap',
'click span.delete': 'remove'
},
initialize: function(){
_.bindAll(this, 'render', 'unrender', 'swap', 'remove'); // every function that uses 'this' as the current object should be in here
this.model.bind('change', this.render);
this.model.bind('remove', this.unrender);
},
render: function(){
$(this.el).html('<span style="color:black;">'+this.model.get('part1')+' '+this.model.get('part2')+'</span> <span class="swap" style="font-family:sans-serif; color:blue; cursor:pointer;">[swap]</span> <span class="delete" style="cursor:pointer; color:red; font-family:sans-serif;">[delete]</span>');
return this; // for chainable calls, like .render().el
},
unrender: function(){
$(this.el).remove();
},
swap: function(){
var swapped = {
part1: this.model.get('part2'),
part2: this.model.get('part1')
};
this.model.set(swapped);
},
remove: function(){
this.model.destroy();
}
});
</ p>