2013-11-17 2 views
0

Вечер все.Knockout.js несколько наблюдаемых массивов не работают?

Я впервые экспериментировал с Knockout.js, и у меня возникают проблемы с несколькими массивами нокаутов на одной странице.

http://jsfiddle.net/573Vc/

например,

var linksBinding = ko.applyBindings(new LinksViewModel()); 
var tasksBinding = ko.applyBindings(new TasksViewModel()); 

выше jsfiddle показывает, как верхняя «Задача» работает большой, и если я удалить весь код/​​HTML, которые относятся к задачам то ссылка будет хорошо работать самостоятельно. Когда я добавляю их на одну и ту же страницу, но второй начинает терпеть неудачу. Может ли кто-нибудь пролить свет? Он жалуется, что параметры не определены, когда я знаю, что они есть?

Thanks

ответ

0

Я не эксперт по нокауту. Тем не менее, я считаю, что вы можете привязать один раз только к определенному элементу. Документ является элементом по умолчанию, если в привязке не указано ни одного. Итак, в вашем случае вы выполняете две привязки (например, applyBindings()), но вы не указываете элемент, поэтому имеет место только одно связывание.

Заканчивать этот fiddle (обратите внимание, я добавил JQuery, так что я мог бы использовать JQuery для доступа к элементу.)

Я просто добавил идентификатор для каждого DIV и обновляется привязок специфически связываться с каждым элементом.

<div id="tasks" class='app-panel-section' data-bind="foreach: taskCategories"> 

    ... 
    var tasksBinding = ko.applyBindings(new TasksViewModel(),$("#tasks")[0]); 
+0

Большое спасибо за это :) Почему вы выбрали [0] в элементе jquery? разве идентификатор не должен быть объявлен один раз? – kalabo

+0

Jquery возвращает массив результатов, в этом случае есть только один. Кстати, я думал, что я бы сказал, что то, что я показал вам, - это просто один из способов приблизиться к этому. Вы также можете определить один ViewModel для страницы, которая содержит оба наблюдаемых массива, а затем сделать одно связывание, чтобы привязать всю модель View к странице. – RHarris

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