我正在尝试创建父类(super class)(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,
});
正如您在上面看到的,父类(super class)(MyShape)具有 color 和 src 属性。因为这个我有一个问题。如果我创建 MyTriangle 实例,我认为我无法在该对象上使用 src 或颜色属性。
问:如果我想编写如下代码(此示例是基于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)。
非常感谢您的帮助。
最佳答案
要使用父类的默认值
,您需要扩展父类的默认值。
例如( source )
var MyRectangle = defaults : _.extend({}, MyShape.prototype.defaults, {
x : 0,
y : 0
})
});
在 Backbone 集合中使用多态模型( source 、 similar question )
A collection can also contain polymorphic models by overriding this property with a constructor that returns a model.
var Library = Backbone.Collection.extend({
model: function(attrs, options) {
if (condition) {
return new PublicDocument(attrs, options);
} else {
return new PrivateDocument(attrs, options);
}
}
});
安example将所有内容放在一起
关于javascript - 如何使用backbone.js的多态性,特别是super的属性?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33862861/