我正在尝试制作超类(MyShape)和子类(MyTriangle,MyRectangle)。我已经搜索了一些backbone.js的多态概念......但是对这个问题一无所知。
我有一个.json文件,如下所示
[
{
"type": "rect",
"x": 10,
"y": 10,
"w": 100,
"h": 100,
"color": "red"
},
{
"type": "arc",
"x": 210,
"y": 20,
"w": 200,
"h": 150,
"color": "blue"
}
]
我使用backbone.js制作了继承结构,如下所示。
var MyShape = Backbone.Model.extend({
defaults : {
color : '',
src : '',
}
});
var MyRectangle = MyShape.extend({
defaults : {
x : 0,
y : 0
}
});
var MyTriangle = MyShape.extend({
defaults : {
x : -10,
y : -10
}
});
var Collection = Backbone.Collection.extend({
model : MyShape,
});
如上所示,超类(MyShape)具有color和src属性。因此,我遇到了一个问题。如果我创建了MyTriangle实例,我想我不能在该对象上使用src或color属性。
问:如果我想制作如下代码(这个例子是基于Java的),我应该如何编码呢?
MyShape myShape = null;
if (type.equals("rect")) {
myShape = new MyRectangle(x, y, w, h);
} else if (type.equals("arc")) {
myShape = new MyArc(x, y, w, h);
} else if (type.equals("triangle")) {
myShape = new MyTriangle(x, y, w, h);
} else {
return null;
}
// option - src or color
if (jsonObject.has("src")) {
myShape.setImg(jsonObject.get("src").toString());
} else if (jsonObject.has("color")) {
myShape.setColor(jsonObject.get("color").toString);
} else {
return null;
}
我必须维护这个结构(MyShape,MyTriangle,MyRectangle)。
我非常感谢你的帮助。
答案 0 :(得分:1)
要使用父类的default
,您需要扩展父类的默认值。
所以,例如(source)
var MyRectangle = defaults : _.extend({}, MyShape.prototype.defaults, {
x : 0,
y : 0
})
});
在主干集合中使用多态模型(source,similar question)
通过使用返回模型的构造函数覆盖此属性,集合还可以包含多态模型。
var Library = Backbone.Collection.extend({
model: function(attrs, options) {
if (condition) {
return new PublicDocument(attrs, options);
} else {
return new PrivateDocument(attrs, options);
}
}
});
将example放在一起