0

私は backbone.js の初心者です。以下の例を見てください。この関数は最後に : appendItem、引数を渡します: item、どこでどのようにその引数を渡しますか?

(function($){

var Item = Backbone.Model.extend({

 defaults: {

   part1: 'hello',

   part2: 'world'

 }

});

var List = Backbone.Collection.extend({

  model: Item

});

var ItemView = Backbone.View.extend({

 tagName: 'li', 

 initialize: function(){

   _.bindAll(this, 'render'); 

   return this.render();
 },
 render: function(){

   $(this.el).html('<span>'+this.model.get('part1')+this.model.get('part2')+'</span>');

   return this; 
 }
});

var ListView = Backbone.View.extend({

 el: $('body'),
 events: {
   'click button#add': 'addItem'
 },

 initialize: function(){
   _.bindAll(this, 'render', 'addItem', 'appendItem'); 
   this.collection = new List();
   this.collection.bind('add', this.appendItem); 
   this.counter = 0;

   return this.render();
 },

 render: function(){

   var self = this;

   $(this.el).append("<button id='add'>Add list item</button>");

   $(this.el).append("<ul></ul>");

   _(this.collection.models).each(function(item){
     self.appendItem(item);
   }, this);
   return this;
 },
 addItem: function(){
   this.counter++;

   var item = new Item();

   item.set({
     part2: item.get('part2') + this.counter
   });

   this.collection.add(item);

 },
 appendItem: function(item){
   var itemView = new ItemView({
     model: item
   });
   $('ul', this.el).append(itemView.el);
 }
});

var listView = new ListView();      
})(jQuery);
4

1 に答える 1

1

イベントリスナーthis.collection.bind('add', this.appendItem);がそれを処理します。

基本的には、新しいアイテムがコレクションに追加されたら、 を呼び出しますthis.appendItem。内部では、バックボーンが呼び出して、this.appendItem追加したばかりのアイテムを提供します。

http://backbonejs.org/#Collection-add

于 2013-06-17T13:40:36.377 に答える