Понимание образца управления Canjs

Я смотрю на образец 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, но она не запускает функцию обновления при изменении значения.

Может ли кто-нибудь объяснить немного по этому поводу?


person Aravind R    schedule 22.01.2014    source источник


Ответы (2)


can.Construct не реализует наблюдаемые свойства.

Объект задачи будет can.Map (http://canjs.com/docs/can.Map.html) или can.Model (http://canjs.com/docs/can.Model.html). С этими двумя вы можете наблюдать за изменениями в объекте и, таким образом, запускать код обновления.

person Sebastian    schedule 22.01.2014

Выделяются несколько моментов: (1) объект задачи имеет completed, установленный до того, как taskstriker будет инициализирован; и (2) для создания экземпляра can.Control или одного из его подклассов вам необходимо передать элемент DOM в качестве первого аргумента и объект параметров в качестве второго.

person air_hadoken    schedule 22.01.2014
comment
Это пример, приведенный на странице canjs. Пожалуйста, перейдите по ссылке ниже canjs.com /docs/can.Control.prototype.on.html - person Aravind R; 22.01.2014
comment
Документы неверны в этом. Сообщите об этом по адресу github.com/bitovi/canjs.com/issues — пока вот пример, который работает: jsfiddle.net/air_hadoken/mXzD7/1 - person air_hadoken; 23.01.2014
comment
еще один небольшой вопрос. Итак, что происходит, когда мы делаем этот шаг can.Observe.extend(Task). Вы не определили этот объект Task rt?. Так что же здесь происходит? Не могли бы вы объяснить и это. - person Aravind R; 24.01.2014
comment
Эта строка определяет класс Task как подкласс can.Observe. Он создает ‹root›.Task как функцию-конструктор без дополнительных статических свойств или свойств-прототипов по сравнению с тем, что уже есть у can.Observe. - person air_hadoken; 24.01.2014