2013-12-23 2 views
0

создать урок ГРАФИК с помощью knockout.js у меня есть какой-то объектKnockoutjs проблемы с привязкой

function Lesson (time){ 
    self=this; 
    self.name = 'Empty'; 
    self.teacher = 'Set name'; 
    self.room = ''; 
    self.time = time; 
} 

И Посмотреть модель

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

self.dayOfWeek  = ['Mo','Tu','We','Th','Fr','Sa']; 
self.timeLessons = {head:'Time',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); 
    } 
    self.addLesson = function(){ 
     shedule[$('#dayOfWeek').value] 
    } 

}; 

некоторые HTML

<tr data-bind="foreach: shedule"> 
    <td class="day"> 
     <div class="head" style="height: 40px;"> 
      <div class="headText" data-bind="text: dayName"></div> 
     </div> 
     <div class="body" data-bind="foreach: lessons"> 
      <div data-bind="click: $root.selectLesson" class="bodyBlock lesson" style="height: 60px;" id="lesson"> 
       <div class="bodyText" data-bind="text: time"></div> 
       <div class="bodyText" data-bind="text: teacher"></div> 
      </div> 
     </div> 
    </td> 
</tr> 

Этот код - это работа. Если я вызываю функцию 'selectLesson', 'имя Сета консоли отображается, но если я заменить

self.teacher = 'Set name'; 

по

self.teacher = ko.observabel('Set name'); 

затем консоль отображает

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} 

Я не понимаю как я могу отправить данные для вызова функции обратного вызова и что это за странный результат во втором примере?

ответ

3

Функция console.log не понимает, как развернуть наблюдаемые. Поэтому вам нужно развернуть его. Либо просто выполнение наблюдаемой как

console.log(lesson.teacher()); 

или с помощью функции UTIL ko.unwrap

console.log(ko.unwrap(lesson.teacher)); 

Поздний имеет преимущество работы как с наблюдаемыми и не наблюдаемыми

Смежные вопросы