Существует несколько достойных подходов, которые вы можете взять здесь, но лучший выбор будет зависеть от того, как вы выделили область боковой панели для формы поиска.
Это сводится к тому, насколько жестко связаны модели товаров и форма поиска.
Совместное использование одной и той же модели представления (или ее части):, если вы можете использовать одни и те же наблюдаемые элементы 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