如何扩展Backbone.Model
:
MyModel = Backbone.Model.extend({ ... });
以便写作
model = new MyModel(object)
返回object
本身,以防它已经是模型,
否则会创建新的Backbone模型?
我有一个自定义函数isModel(object)
来检查object
是否为模型。
答案 0 :(得分:2)
我认为一个简单的类方法可以减少尝试改变Backbone构造函数的工作方式。 extend
的属性第二个对象参数作为属性添加到构造函数中,因此您可以执行以下操作:
var MyModel = Backbone.Model.extend({
// Standard model stuff goes here...
}, {
toMyModel: function(object) {
if(isModel(object))
return object;
return new MyModel(object);
}
});
然后是:
var o = MyModel.toMyModel(someObject);
如果someObject
已经是MyModel
,那么您将获得o === someObject
,否则您将new MyModel(someObject)
中获得o
。
演示:http://jsfiddle.net/ambiguous/h38Ks/
如果你担心会说:
new MyCollection([ myModel, someObject ])
然后没有什么可担心的,Backbone会为你检查一下。我没有看到任何有关此行为的文件保证,但是:
model
属性),因此它可以快速进行instanceof
检查。reset
来电add
调用set
来调用_prepareModel
进行转换对象建模实例;您会在instanceof
顶部找到_prepareModel
支票。请注意,_prepareModel
将接受任何Backbone.Model
个实例,而不仅仅是集合model
的实例。除非你的代码真的很混乱,否则这不应该是一个问题。
你可以看到这个“它已经是模特吗?”在这里采取行动:http://jsfiddle.net/ambiguous/YCdV7/