Backbone.js 自定义主干。模型创建
如何扩展主干网。型号:Backbone.js 自定义主干。模型创建,backbone.js,model,constructor,prototype,Backbone.js,Model,Constructor,Prototype,如何扩展主干网。型号: MyModel = Backbone.Model.extend({ ... }); 因此,写作 model = new MyModel(object) 如果对象本身已经是模型,则返回对象本身, 否则会创建新的主干模型吗 我有一个自定义函数isModel(object)来检查object是否是一个模型。我认为一个简单的类方法会比尝试改变主干构造函数的工作方式更容易混淆。properties第二个对象参数作为属性添加到构造函数上,因此您可以执行以下操作: var MyMo
MyModel = Backbone.Model.extend({ ... });
因此,写作
model = new MyModel(object)
如果对象本身已经是模型,则返回对象本身,
否则会创建新的主干模型吗
我有一个自定义函数
isModel(object)
来检查object
是否是一个模型。我认为一个简单的类方法会比尝试改变主干构造函数的工作方式更容易混淆。properties第二个对象参数作为属性添加到构造函数上,因此您可以执行以下操作:
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
,否则你会在o
中得到新的MyModel(someObject)
演示:
如果你担心说这样的话:
new MyCollection([ myModel, someObject ])
那就没什么好担心的了,我会帮你检查的。我没有看到任何关于这种行为的书面保证,但是:
instanceof
检查\u prepareModel
的顶部找到instanceof
复选框\u prepareModel
将接受任何主干.Model
实例,而不仅仅是集合的模型的实例。这应该不是问题,除非你的代码真的很混乱
你可以在这里看到“它已经是一个模型了吗?”这句话:谢谢,好主意,唯一的一件事是我的模型创建是通过将数组传递给集合构造函数来完成的,所以我必须重写后者,这也是同样的问题。你确定集合不会为你执行该检查吗?粗略地检查一下消息来源,就可以看出可能是这样。我现在在我的平板电脑上,但我可以在早上进一步检查。看来你是对的。没有想到,事情可能比看起来容易:)我只是运行了主干代码,找到“这东西已经是模型了吗?”检查。是的,我看到了。模型和集合在这里的工作方式有所不同,这有点违反直觉。如果model
已经是一个模型,那么new Backbone.model(model)
没有理由像当前那样创建一个混乱的新模型。