我有一个问题,将现有的模型实例扩展到主干中的其他类型的派生模型,这可能吗
如果是,这是我需要做的一个例子,请帮助:
我有一个问题,将现有的模型实例扩展到主干中的其他类型的派生模型,这可能吗
如果是,这是我需要做的一个例子,请帮助:
var A = Backbone.Model.extend({
initialize: function(options){
console.log('A initialized');
},
foo : function(){
console.log('foo of A');
}
});
var B = Backbone.Model.extend({
initialize: function(options){
A.prototype.initialize.apply(this, [options]);
console.log('B initialized');
},
foo : function(){
console.log('foo of B');
},
goo : function(){
console.log('goo of B');
}
});
var ACollection = Backbone.Collection.extend({
model: A
});
var BCollection = Backbone.Collection.extend({
model: B
});
var aa = new ACollection();
var bb = new BCollection();
aa.add(new A({
attr1:1,
attr2:2,
attr3:3
})); // **A initialized**
// later after a while
var a = aa.at(0);
var b = cast a to type B <---- how to do this
bb.add(b);
// later after a while
console.log(bb.at(0).get('attr1')); // **1**
b.goo(); // **goo of B**
b.foo(); // **foo of B**
a.set({attr1:'new1'});
console.log(bb.at(0).get('attr1')); // **new1**
我不想克隆模型"a",因为我可能会在其他地方更改"a"的属性,并且我希望看到"b"也发生了更改(同一对象(谢谢我不想克隆模型"a",因为我可能会在其他地方更改"a"的属性,并且我希望看到"b"也发生了更改(同一对象(感谢
我认为你可以做到:
var a = ACollection.at(0);
var b = new B(a.toJSON()); // create a B instance with data from instance a?
如果您想将其添加到bb
集合,只需:
bb.create(a.toJSON()); // executes new B() internally
使用_.extend怎么样?
类似于:
var AModel = Backbone.Model.extend(...);
var BModel = Backbone.Model.extend(...);
var a = new AModel();
_.extend(a, BModel.prototype);
我用小提琴试了一下,效果似乎不错。
调用a.foo()
导致我的控制台中出现foo of b
。我很快就用事件进行了测试,它们似乎完好无损。我可能错过了一些副作用。