1

我正在查看用于控制的 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 创建任务,但是当值更改时它不会触发更新功能。

有人可以解释一下吗?

4

2 回答 2

3

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

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

于 2014-01-22T22:37:56.680 回答
1

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

于 2014-01-22T19:23:38.600 回答