2016-12-01 43 views
-4

我正在学习一些Backbone,我很困惑this在模型中。Backbone模型中的`this`是什么?

Person = Backbone.Model.extend({ 
    initialize: function() { 
     console.log('hello world'); 
     this.bind("change:name", function() { 
      console.log(this.get('name') + " is now the value for name"); 
     }); 
     this.bind('invalid', function(model, error) { 
      console.error(error); 
     }); 
    }, 
    defaults: { 
     name: "Bob Hope", 
     height: "unknown" 
    }, 
    validate: function (attributes) { 
     if(attributes.name == 'Joe') { 
      return "Uh oh, you're name is Joe!"; 
     } 
    } 
}); 
var person = new Person(); 
person.set({name: "Joe", height:"6 feet"}, {validate:true}); 
console.log(person.toJSON()); 

this.bind是怎么回事? change:name是什么? initializedefaults只是JavaScript对象内的方法吗?

+2

你可以找到所有的答案[backbonejs网站(http://backbonejs.org/#Events-catalog)。另请参阅[注释源代码](http://backbonejs.org/docs/backbone.html#section-51) –

回答

3

this里面initialize是模型的实例。

.bind.on方法内部backbone.Events模块,它可以让你的对象

change:name上绑定的事件处理程序仅仅是事件名称的别名,它允许你跟踪一个名为'name'模型的属性的变化。

initialize是一个构造函数方法,将在实例化模型时初始调用。

defaults是一个设置默认模型属性的对象(或者它可以是一个函数)。

所以initializedefaults确实是一个对象内的方法(除了defaults也可以是一个属性),但它们对骨干有特殊的含义。并且该对象被扩展为Backbone.Model的所有其他方法和属性,使其成为一个功能模型。

阅读更多backbone docs