【问题标题】:Can.js - Adding a can.Compute to prototypeCan.js - 将 can.Compute 添加到原型
【发布时间】:2013-11-15 14:48:57
【问题描述】:

如何将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。只是希望有人有更好的方法。

【问题讨论】:

    标签: javascript prototype canjs canjs-control


    【解决方案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);
        }
    });
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-10-10
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多