在Backbone / Javascript中理解“this”

时间:2013-03-22 05:13:22

标签: javascript backbone.js

我正在尝试了解如何使用Backbone创建对象和方法。我从这样的事情开始:

Person = (function () {
  return Backbone.Model.extend({
    defaults: {
      name: 'jon' 
    },

    changeName: function (newName) {
     console.log(newName);
      this.name = newName;
    }
  });

})();


var p1 = new Person();
console.log(p1.get('name'));
p1.changeName("samanatha");
console.log(p1.get('name'));

我不明白的是,为什么我的p1.name属性没有改变。我认为这与this.name中的“this”有关,因为我仍然试图理解“这个”是如何工作的,但我认为自this.name = newNamename=newName以来我遗漏了其他的东西两者都不起作用。谢谢!

2 个答案:

答案 0 :(得分:5)

name包含在您的模型的属性中:p1.attributes.name。这就是您使用get()访问它的原因。如果您想更改name,可以执行以下操作之一:

p1.set("name", "samantha")

p1.set({"name": "samantha"})

通过传入一个对象,后者允许您一次设置多个属性。

根据docs

Please use set to update the attributes instead of modifying them directly.

这样,Backbone可以在您更改属性时执行触发change事件,或在调用toJSON()时提供属性的序列化版本。

答案 1 :(得分:0)

...
changeName: function (newName) {
 console.log(newName);
  this.name = newName;
}
...

应该是

...
changeName: function (newName) {
 console.log(newName);
  this.set ({'name': newName});
}
...

http://backbonejs.org/#Model-set

相关问题