2012-05-21 5 views
0

Я только начинаю с knockout.js. У меня есть foreach связывания, как это, который работает отлично:knockout.js: pass {data: xyz} to foreach вместо просто xyz

<ul data-bind="foreach: people"> 
    <li> .... </li> 
</ul> 

people является частью моей модели я передаю в ko.applyBindings. В соответствии с документацией должно также работать следующее:

<ul data-bind="foreach: {data: people}"> 

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

Моя идея - передать обработчики для afterAdd в foreach. Поэтому мне нужен второй способ назвать это.

+2

На первый взгляд кажется, что он должен работать нормально. Кроме того, у нокаута есть большой try-catch, который, вероятно, скрывает сообщения об ошибках (имел эту проблему несколько раз), просматривал код и устанавливал собственную точку останова, возможно, это поможет вам найти проблему. – julioolvr

+0

Изменение привязки не должно приводить к тому, что вы видите со всем остальным кодом без изменений, поведение должно быть точно таким же. Вы что-то изменили в одно и то же время? –

+0

Это может быть много чего, скрипка поможет тонну! –

ответ

0

Просто для записей: Решение является немного странным и источником проблемы была еще одна ошибка в моем коде. people инициализируется через ko.observableArray. Когда я получил новые данные с сервера, я udated свою модель, как это:

model.people(ko.observableArray(newData)); 

Теперь я знаю, что это правильный способ сделать это:

model.people(newData); 

По какой-то причине, первый версия по-прежнему работает с определенными спецификациями привязки шаблонов, но не для всех. Второй работает отлично в каждом случае.

0

Я считаю, что вы действительно ищете привязку к шаблону. Foreach ярлык на него, но если вам нужно afterAdd вы могли бы использовать полное связывание:

<ul data-bind='template: { foreach: people, 
         afterAdd: myPostProcessingLogic }'> </ul> 
Смежные вопросы