0

我是一个backbone.js初学者,看看下面的例子,我想知道这个函数到底是:appendItem,它传递了参数:item,它在哪里以及如何传递那个arg?

(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 回答