2013-12-04 5 views
-1

Я новичок в KnockoutJs и, похоже, не понимаю этого. У меня есть массив объектов, называемый «неделями», и каждый объект имеет массив объектов, называемый «неделя». Как я могу сделать foreach каждую неделю. Вот что я пробовал до сих пор, но ничего не получаю.Knockoutjs вложенный foreach на вложенном объекте

модель:

var Model = { 
    weeks: ko.observableArray([ 
{"week":[ {day:'01', total:'109'}, {date:'05', total:'250'} ]}, 
{"week":[ {date:'02', total:'102'}, {date:'05', total:'255'} ]}    
    ]) 
}; 

ko.applyBindings(Model); 

вид:

<section class="dates" data-bind="foreach: weeks"> 
    <article data-bind="foreach: $data.week"> 
     <span class="day" data-bind="text: day"></span>     
     <span class="dayTotal" data-bind="text: total"></span>      
    </article> 
</section> 

Большое спасибо!

+2

Если вы используете те же имена свойств для каждого объекта: так что замените дату на день, тогда ваш код работает нормально: http://jsfiddle.net/Grn7M/ – nemesv

+1

Я думаю, что у вас есть опечатка: первый объект ссылается на свойство дня а остальные имеют свойство даты. Поэтому замените день за днем. – Damien

+0

Спасибо, какой позор я отлаживаю опечатку в течение 2 часов – Mosaic

ответ

1

Используя то же исправление, которое @nemesv сделал с вашей моделью просмотра, вот как вы могли бы прокручивать каждую неделю (согласно вашему исходному вопросу). Вот скрипку, показывая его, http://jsfiddle.net/b7gpP/

function loopWeeks() { 
    ko.utils.arrayForEach(Model.weeks(), function (weeks) { 
     for (var i = 0; i < weeks.week.length; i++) { 
      console.log(weeks.week[i]); // here you have access to one of your week objects 

      // set value of a day 
      weeks.week[i].day = "4"; 

      // get value of a day 
      var day = weeks.week[i].day; 

     } 
    }); 
} 

Это немного некрасиво, по крайней мере, с точки зрения KO; но ваши отдельные недели не являются наблюдаемыми. Если вы намереваетесь быть наблюдаемыми, дайте мне знать, и я изменю сообщение.

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