Eu estou pensando que meu aplicativo está ficando muito grande agora, muito grande para lidar com cada View com um único ViewModel.
Então, eu estou pensando em como seria difícil criar vários ViewModels e carregá-los em um único View. Com uma nota, eu também preciso passar dados do X ViewModel para o Y ViewModel para que os ViewModels individuais precisem se comunicar uns com os outros ou pelo menos estar cientes um do outro.
Por exemplo, eu tenho uma lista <select>
suspensa, que selecione suspensa tem um estado selecionado que me permite passar o ID do item selecionado na <select>
outra chamada do Ajax em um ViewModel separado ....
Todos os pontos em lidar com vários ViewModels em uma única visualização são apreciados :)
masterVM
.Respostas:
Se todos eles precisarem estar na mesma página, uma maneira fácil de fazer isso é ter um modelo de vista principal contendo uma matriz (ou lista de propriedades) dos outros modelos de vista.
Em seguida, você
masterVM
pode ter outras propriedades, se necessário, para a própria página. A comunicação entre os modelos de visualização não seria difícil nesta situação, pois você poderia retransmitir através das ligações /masterVM
ou usar as ligações$parent
/$root
in ou algumas outras opções personalizadas.fonte
with:
bindging, então você não vai repetir-seNocaute agora suporta vários modelos de ligação. O
ko.applyBindings()
método usa um parâmetro opcional - o elemento e seus descendentes aos quais a ligação será ativada.Por exemplo:
Isso restringe a ativação ao elemento com ID
someElementId
e seus descendentes.Veja a documentação para mais detalhes.
fonte
[0]
para especificar um elemento DOM real (em vez do objeto jQuery) da seguinte forma:ko.applyBindings(myViewModel, $('#someElementId')[0])
Esta é a minha resposta depois de concluir um projeto muito grande com muitos ViewModels em exibição única.
Visualização em HTML
Para esta visualização, estou criando dois modelos de visualização para id = container1 e id = container2 em dois arquivos javascript separados.
Container1ViewModel.js
Container2ViewModel.js
Depois que esses dois viewmodels forem registrados como viewmodels separados no DataFunction.js
Assim, você pode adicionar qualquer número de modelos de exibição para divs separados. Mas certifique-se de não criar um modelo de vista separado para uma div dentro da div registrada.
fonte
Verifique o plug-in MultiModels para Knockout JS - https://github.com/sergun/Knockout-MultiModels
fonte
Usamos componentes para conseguir isso. ( http://knockoutjs.com/documentation/component-overview.html )
Por exemplo, temos esta biblioteca de componentes que estamos desenvolvendo: https://github.com/EDMdesigner/knobjs
Se você digitar o código, verá que, por exemplo, reutilizamos o componente botão de comando em vários lugares.
fonte