我是骨干新手,所以请多多包涵。我想创建一个集合,其中所有模型都有一些他们共享的关键属性以及一些他们不共享的其他属性。我认为最好的方法是扩展一个超类模型(包含所有共享属性的默认值),这样当我实例化一个新的子类模型时,这些属性被初始化,并且特定于子类的附加属性也被添加到该模型。我不知道如何做到这一点,但这是我一直在努力的方向:
app.Fruit = Backbone.Model.extend(
{
defaults: {
name: "none",
classification: "none",
color: "none"
},
initialize: function()
{
console.log("Fruit Initialized");
}
});
app.Apple = app.Fruit.extend(
{
url: "/php/Apple.php",
initialize: function()
{
console.log("Apple initialized");
// somehow fetch additional information from server
// and add sublcass-specific attributes to model
// (for example, in the case of an apple, an attribute called cultivar)
}
});
var FruitCollection = Backbone.Collection.extend(
{
model: function(attributes, options)
{
switch(attributes.name)
{
case "Apple":
return new app.Apple(attributes, options);
break;
default:
return new app.Fruit(attributes, options);
break;
}
}
// ...
});
app.fruitCollectionCurrent = new FruitCollection([
{name: "Apple"},
{name: "Orange"}
]);
// logs: Fruit Initialized
任何有关如何正确初始化具有附加属性的子类的建议将不胜感激。
谢谢。
编辑:解决方案
我想我会发布最终为我工作的代码......感谢@Mohsen:
app.Fruit = Backbone.Model.extend(
{
defaults: {
name: "none",
classification: "none",
color: "none"
},
initialize: function()
{
console.log("Fruit Initialized");
}
});
app.Apple = app.Fruit.extend(
{
url: "/php/Apple.php",
initialize: function()
{
console.log("Apple initialized");
return this.fetch();
}
});
我什至不需要子类中的异步调用,因为我没有为 Fruit 获取任何额外的数据(Fruit 的属性只是在构造函数中设置),只为 Apple 获取。我真正想要的是使用指定 URL 调用 this.fetch() 。对不起,如果这个问题让事情看起来更复杂......