Я думаю, что мое приложение становится довольно большим, слишком большим, чтобы обрабатывать каждое представление с помощью одной ViewModel.
Поэтому мне интересно, насколько сложно было бы создать несколько моделей ViewModel и загрузить их все в одно представление. С примечанием, что мне также нужно иметь возможность передавать данные X ViewModel в данные Y ViewModel, чтобы отдельные ViewModel должны были иметь возможность общаться друг с другом или, по крайней мере, знать друг о друге.
Например, у меня есть <select>
раскрывающийся список , который в раскрывающемся списке выбора имеет выбранное состояние, которое позволяет мне передать идентификатор выбранного элемента в <select>
другой вызов Ajax в отдельной ViewModel ....
Любые замечания по работе с многочисленными моделями в одном представлении приветствуются :)
masterVM
.Ответы:
Если все они должны находиться на одной странице, одним из простых способов сделать это является создание модели основного представления, содержащей массив (или список свойств) других моделей представления.
Тогда у вас
masterVM
могут быть другие свойства, если необходимо, для самой страницы. В этой ситуации связь между моделями представлений не составит труда, так как вы можете ретранслировать черезmasterVM
, или можете использовать привязки$parent
/$root
in, или некоторые другие пользовательские опции.источник
with:
привязку, чтобы не повторятьсяKnockout теперь поддерживает привязку нескольких моделей.
ko.applyBindings()
Метод принимает необязательный параметр - элемент и его потомков , к которому будет активирован связывание.Например:
Это ограничивает активацию элементом с идентификатором
someElementId
и его потомками.Смотрите документацию для более подробной информации.
источник
[0]
чтобы указать фактический элемент DOM (вместо объекта jQuery), например так:ko.applyBindings(myViewModel, $('#someElementId')[0])
Это мой ответ после завершения очень большого проекта с множеством ViewModels в одном представлении.
Просмотр HTML
Для этого представления я создаю 2 модели представления для id = container1 и id = container2 в двух отдельных файлах javascript.
Container1ViewModel.js
Container2ViewModel.js
Затем после этих двух моделей представления регистрируются как отдельные модели представления в DataFunction.js.
Таким образом, вы можете добавить любое количество моделей представления для отдельных элементов div. Но убедитесь, что не создаете отдельную модель представления для div внутри зарегистрированного div.
источник
Проверьте плагин MultiModels для Knockout JS - https://github.com/sergun/Knockout-MultiModels
источник
Для этого мы используем компоненты. ( http://knockoutjs.com/documentation/component-overview.html )
Например, у нас есть библиотека компонентов, которую мы разрабатываем: https://github.com/EDMdesigner/knobjs
Если вы углубитесь в код, то увидите, что, например, мы повторно используем компонент кнопки-регулятора в нескольких местах.
источник