我正在尝试了解如何使用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 = newName
和name=newName
以来我遗漏了其他的东西两者都不起作用。谢谢!
答案 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});
}
...