Javascript-форум (https://javascript.ru/forum/)
-   Библиотеки/Тулкиты/Фреймворки (https://javascript.ru/forum/library-toolkit-framework/)
-   -   Knockoutjs проблемы с binding (https://javascript.ru/forum/library-toolkit-framework/43830-knockoutjs-problemy-s-binding.html)

nexus0603 23.12.2013 07:19

Knockoutjs проблемы с binding
 
Всем привет! Собственно-начал разбираться с knockout, пишу приложение-расписание занятий. Излагаю суть вопроса: Есть такой вот объект:

function Lesson (time){
    self=this;
    self.name = 'Пусто';
    self.teacher = 'Вася';
    self.room = '';
    self.time = time;
}

И сама модель

function SheduleViewModel() {
    // Data
    var self = this;

    self.dayOfWeek      = ['ПН','ВТ','СР','ЧТ','ПТ','СБ'];
    self.timeLessons    = {head:'Время',body:['08:30-09:55',"10:10-11:35","11:50-13:15","13:45-15:10","15:25-16:50","17:05-18:30","18:40-20:00"]};

    self.initShedule = function(){
        var temp = [];
        for(var i = 0; i < self.dayOfWeek.length; ++i)
        {
            var dayLessons = [];

            for(var j = 0; j < self.timeLessons['body'].length; ++j ){
                dayLessons.push(new Lesson(self.timeLessons['body'][j]));
            }
            temp.push({dayName: self.dayOfWeek[i],lessons:dayLessons})
        }
        return temp;
    }
    self.shedule = self.initShedule();

    //вызывается при нажатии на элемент.
    self.selectLesson = function(lesson){
        console.log(lesson.teacher);
    }

};

ko.applyBindings(new SheduleViewModel());

Суть вот в чем. Мне надо отслеживать изменение полей объекта Lesson. В коде выше все работает. Если я нажму на элемент( на котором data-bind="click:$root.selectLesson" ) то в консоль выводиться слово "Вася". Если же я сделаю

self.teacher = ko.observable('Вася');

То в консоль выводиться:

function c(){if(0<arguments.length)return c.equalityComparer&&c.equalityComparer(d,arguments[0])||(c.O(),d=arguments[0],c.N()),this;a.i.lb(c);return d}

Почему не получается наблюдать за объектом, и откуда берется эта функция я не понимаю. Заранее всем спасибо!


Часовой пояс GMT +3, время: 19:33.