Can.js - Добавление can.Compute к прототипу
Как я могу добавить can.compute к прототипу экземпляра can.Control? Я пытаюсь передать его в функции экземпляра с расширением, но все экземпляры класса совместно используют один и тот же экземпляр вычисления.
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. Просто надеясь, что у кого-то есть лучший способ.
1 ответ
Совместное использование одного и того же экземпляра является своего рода точкой прототипа. Вы можете использовать функцию-прототип, которая возвращает новое вычисление. Альтернатива использованию элементов управления init
будет использовать настройку прототипа или изменить параметры в статической настройке:
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);
}
});