我是Backbone和JS的新手,如果我错了,请纠正我......
使用backbone.js网站上的示例,
var Note = Backbone.Model.extend({
initialize: function() { ... },
author: function() { ... },
coordinates: function() { ... },
allowedToEdit: function(account) {
return true;
}
});
Backbone.js说,
“要创建自己的Model类,可以扩展Backbone.Model并提供实例属性,因为>以及可选的classProperties直接附加到构造函数。”
所以我创建了两个对象,
var n1 = new Note;
var n2 = new Note;
现在属性autor,allowedToEdit坐标等不是n1和n2的实例属性。它们是在 proto 链接下创建的。如何在backbone.js中创建实例属性
此外,如果我尝试在对象的javascript中修改继承的属性,则不会更改继承的属性。而是在对象实例属性中创建具有相同名称的新属性。我怎么做到这一点? 提前谢谢......
答案 0 :(得分:4)
我相信你对扩展的做法有点困惑。 Extend类似于继承。如果以这种方式扩展Model
,则创建一个名为Note
的派生“类”,它现在具有这些成员函数。
但这不是你想要的,我不认为。您需要具有这些DATA属性的模型。将数据添加到实例很简单:
var Note = Backbone.Model.extend({});
var n1 = new Note({
author: "Gautham",
coordinates: {x: 200, y: 100},
allowedToEdit: true
});
var author = n1.get("author");
换句话说,Backbone模型上的数据属性是动态的。您无需在Note
推导中声明它们。
但是,如果您希望Note
派生具有这种方式的属性,您可以始终将它们定义为代理到get
函数:
var Note = Backbone.Model.extend({
author: function() { return this.get('author'); },
coordinates: function() { return this.get('coordinates'); }
allowedToEdit: function() { return this.get('allowedToEdit'); }
});
var n1 = new Note({...});
var author = n1.author();
答案 1 :(得分:0)
您想使用默认属性,这是您期望的行为:
var Note = Backbone.Model.extend({
defaults:function(){
return {
author : 'Default author',
coordinates : [0,0],
};
}
});
var note1 = new Note;
var note2 = new Note;
var note3 = new Note({author: 'Daniel!', coordinates:[9,9]});
console.log( note1.toJSON() );
console.log( note2.toJSON() );
console.log( note3.toJSON() );