如何向can.compute实例原型添加can.Control?我试图将它传递给带有extend的实例函数,但是该类的所有实例共享相同的单个计算实例。
can.Control.extend('App.Window', {
...
},{
...
active: can.compute(true, function(newVal, oldVal) {
return !!newVal;
})
});
var a = new App.Window,
b = new App.Window;
a.active === b.active // true
a.active() // true
a.active(false)
a.active() // false
b.active() // false
显然我可以在init函数中执行此操作,但我宁愿不这样做,所以当我将来继承这个时,我不必记得调用父init。只是希望有人有更好的方法。
答案 0 :(得分:1)
共享同一个实例是原型的重点。您可以使用返回新计算的原型函数。
使用控件init
的替代方法是使用prototype setup或修改static setup中的选项:
can.Control.extend('App.Window', {
...
},{
setup: function(element, options) {
this.active = can.compute(true, function(newVal, oldVal) {
return !!newVal;
});
return can.Control.prototype.setup.apply(this, arguments);
}
});