【问题标题】:Understanding Canjs Control sample了解 Canjs 控件示例
【发布时间】:2014-01-22 17:05:41
【问题描述】:

我正在查看用于控制的 Canjs 示例。

TaskStriker = can.Control({
    "{task} completed": function(){
        this.update();
    },
    update: function(){
        if ( this.options.task.completed ) {
            this.element.addClass( 'strike' );
        } else {
            this.element.removeClass( 'strike' );
        }
    }
});
var taskstriker = new TaskStriker({ 
    task: new Task({ completed: 'true' }) 
});

在这种情况下,Task 对象究竟是什么?我尝试使用 can.Construct 创建任务,但是当值更改时它不会触发更新功能。

有人能解释一下吗?

【问题讨论】:

    标签: javascript canjs canjs-control canjs-map


    【解决方案1】:

    can.Construct 不实现可观察的属性。

    任务对象将是一个 can.Map (http://canjs.com/docs/can.Map.html) 或一个 can.Model (http://canjs.com/docs/can.Model.html)。有了这两个,您就可以观察对象的变化,从而触发更新代码。

    【讨论】:

      【解决方案2】:

      有几件事很突出:(1)您的任务对象在taskstriker 初始化之前设置了completed; (2) 要实例化一个 can.Control 或其子类,您需要传入一个 DOM 元素作为第一个参数,并将 options 对象作为第二个参数。

      【讨论】:

      • 这是canjs页面中给出的示例。请参考下面的链接canjs.com/docs/can.Control.prototype.on.html
      • 文档对此不正确。去github.com/bitovi/canjs.com/issues报告它——同时这里有一个有效的例子:jsfiddle.net/air_hadoken/mXzD7/1
      • 还有一个小问题。那么当我们做这一步的时候会发生什么can.Observe.extend("Task")。你还没有定义这个对象Task rt?。那么这里会发生什么?。你能解释一下吗?
      • 该行将 Task 类定义为 can.Observe 的子类。它将 .Task 创建为构造函数,在 can.Observe 已有的内容之上没有额外的静态或原型属性。
      猜你喜欢
      • 1970-01-01
      • 2012-10-14
      • 2012-06-01
      • 2017-06-24
      • 1970-01-01
      • 1970-01-01
      • 2016-09-13
      • 2020-04-24
      • 2012-01-28
      相关资源
      最近更新 更多