我有一个问题,将现有的模型实例扩展到骨干中的其他类型的派生模型,这可能吗?
如果是这样,这是我需要做的一个例子,请帮助:
我有一个问题,将现有的模型实例扩展到骨干中的其他类型的派生模型,这可能吗?
如果是这样,这是我需要做的一个例子,请帮助:
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**
我不想克隆模型&#39; a&#39;因为我可能会改变&#39; a&#39;在其他地方,我想看到的还有&#39; b&#39;改变了(同一个对象) 谢谢 我不想克隆模型&#39; a&#39;因为我可能会改变&#39; a&#39;在其他地方,我想看到的还有&#39; b&#39;改变了(同一个对象) 感谢
答案 0 :(得分:0)
我认为你可以做到:
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
答案 1 :(得分:0)
如何使用_.extend?
类似的东西:
var AModel = Backbone.Model.extend(...);
var BModel = Backbone.Model.extend(...);
var a = new AModel();
_.extend(a, BModel.prototype);
我在小提琴中尝试了这个,似乎正常工作。
在我的控制台中调用a.foo()
导致foo of b
。我很快就用事件测试了它们,它们似乎保持不变。可能会有我遗漏的副作用。