2

我试图了解如何使用 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”的工作原理,但我认为我错过了其他东西,this.name = newName而且name=newName两者都不起作用。谢谢!

4

2 回答 2

5

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

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

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

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

根据文档

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

这样 Backbone 就可以做一些事情,比如change当你改变一个属性时触发一个事件,或者当你调用toJSON().

于 2013-03-22T05:20:04.103 回答
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

于 2013-03-22T05:27:38.550 回答