2013-11-15 56 views
0

如何將can.compute添加到can.Control實例原型中?我試圖通過擴展將它傳遞給實例函數,但該類的所有實例共享計算的單個實例。Can.js - 將can.Compute添加到原型

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函數,但我寧願沒有,所以我從這個繼承在未來,我將不必記住調用父類的初始化。只希望有人有更好的辦法。

回答

1

共享相同的實例是原型的一點。您可以使用返回新計算的原型函數。 到使用Controls init另一種方法是使用在static setupprototype 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); 
    } 
});