2013-04-07 3 views
0

Я создал представление в durandal для отображения списка продуктов.Durandal (Jumpstar) - добавление панели боковой панели поиска для просмотра результатов

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

Боковая панель должна быть объявлена ​​вне вида продуктов, поэтому она не обновляется при каждом изменении фильтра в форме поиска. Значит, мне нужна внешняя боковая панель, которая обновит представление и появится только при активации этого вида.

Я не знаю, как начать реализовывать его и как наилучшим образом это сделать. Помощь будет отличной.

ответ

0

Существует несколько достойных подходов, которые вы можете взять здесь, но лучший выбор будет зависеть от того, как вы выделили область боковой панели для формы поиска.

Это сводится к тому, насколько жестко связаны модели товаров и форма поиска.

Совместное использование одной и той же модели представления (или ее части):, если вы можете использовать одни и те же наблюдаемые элементы KnockOut между обеими видами моделей, тогда остальное в значительной степени «обычное дело». Вы можете выполнить это путем совместного использования ko.observable между моделью просмотра продуктов и моделью просмотра формы поиска. Это может быть сделано одним из следующих способов:

  • , разделяющих общий вид-модель базы (здесь некоторая информация о том, что: View Model inheritance when using Durandal)
  • создать отдельный модуль, что и продукты VM и поиск VM может потребовать
  • настроить композицию Дюрандала так, чтобы они оба использовали буквально одну и ту же модель обзора. Однако это не очень интуитивно, и я бы не рекомендовал его для этого.

Как только у вас есть доступная общая модель, вы можете привязать ее к обоим представлениям, а наблюдаемость KnockOut должна быть в состоянии предоставить всю необходимую информацию.

Более свободный подход - использовать технику pub/sub. Это делает модули довольно независимыми, но есть связанные с ним последствия для управления и обслуживания, как и при использовании глобальных переменных. Я бы рекомендовал это только тогда, когда это необходимо, чтобы модели просмотра были изолированы друг от друга, насколько это возможно, или когда логистика просто не позволяет модели представления знать друг о друге.

В виртуальном/вспомогательном сценарии поисковая VM только публикует событие, в котором перечислены продукты VM, и наоборот. Существует множество JS-библиотек, которые предоставляют эту функциональность. Он даже включен в состав Durandal - вот некоторая информация по этому поводу: Durandal: Leverage Publish and Subscribe Также посмотрите на Durandal Event reference

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