Knockoutjs foreach не работает

У меня есть две части кода в одной таблице. Один выглядит так:

<tr>
   <th data-bind="text: tableHeaders()[0].title"></th>
   <th data-bind="text: tableHeaders()[1].title"></th>
   <th data-bind="text: tableHeaders()[2].title"></th>
</tr>

А другой выглядит так:

<tr data-bind="foreach: tableHeaders">
   <th data-bind="text: title"></th>
</tr>

Первый печатает правильно, а второй ничего не печатает. Просмотр исходного кода показывает

<tr data-bind="foreach: tableHeaders"></tr>

Мне не удалось воспроизвести мою проблему в jsfiddle (работает: http://jsfiddle.net/nnjEf/4/), так что это явно другая проблема. Любые идеи, как еще я могу устранить неполадки?


person bdev    schedule 25.06.2012    source источник
comment
Можете ли вы опубликовать свою модель просмотра. Ваш HTML правильный.   -  person Kyeotic    schedule 25.06.2012
comment
Я добавил ссылку jsfiddle, но там все работает нормально.   -  person bdev    schedule 25.06.2012
comment
Проверьте firebug, чтобы найти ошибки.   -  person Wiz    schedule 25.06.2012


Ответы (1)


«Управление привязками потока» (т.е. использование встроенного foreach с вашим HTML), как вы сделали, было впервые представлено в Knockoutjs 2.0 (или 1.3 в названии бета-версии). Ваш jsfiddle также использует v2.0 в качестве основы.

Невозможно сказать, не видя вашего фактического кода, но я подозреваю, что вы используете более низкую версию, которая не поддерживает это. Старый способ, который, вероятно, будет работать, если вы используете v1.2, - это использовать шаблоны - например.

<tr data-bind="template:{name: 'tableHeadersTemplate', foreach: tableHeaders}">
</tr>

<script type="text/html" id="tableHeadersTemplate">    
   <th data-bind="text: title"></th>
</script>

Это также будет работать в версии 2.0 и выше, но, очевидно, генерирует гораздо больше разметки, чем то, что вы сейчас пытаетесь сделать.

person bittenbytailfly    schedule 26.06.2012