Je pense que mon application devient assez grande maintenant, trop grande pour gérer chaque vue avec un seul ViewModel.
Je me demande donc à quel point il serait difficile de créer plusieurs ViewModels et de les charger tous dans une seule View. Avec une note que je dois également être en mesure de passer des données X ViewModel en données Y ViewModel afin que les ViewModels individuels doivent être en mesure de communiquer entre eux ou au moins de se connaître.
Par exemple, j'ai un <select>
menu déroulant, ce menu déroulant de sélection a un état sélectionné qui me permet de passer l'ID de l'élément sélectionné dans le <select>
à un autre appel Ajax dans un ViewModel séparé ....
Tous les points sur le traitement de nombreux ViewModels dans une seule vue sont appréciés :)
masterVM
.Réponses:
S'ils doivent tous être sur la même page, un moyen simple de le faire est d'avoir un modèle de vue maître contenant un tableau (ou une liste de propriétés) des autres modèles de vue.
Ensuite, vous
masterVM
pouvez avoir d'autres propriétés si nécessaire, pour la page elle-même. La communication entre les modèles de vue ne serait pas difficile dans cette situation, car vous pourriez relayer viamasterVM
, ou vous pourriez utiliser les liaisons$parent
/$root
in, ou d'autres options personnalisées.la source
with:
liaison, vous ne vousKnockout prend désormais en charge la liaison de plusieurs modèles. La
ko.applyBindings()
méthode prend un paramètre facultatif - l'élément et ses descendants auxquels la liaison sera activée.Par exemple:
Cela limite l'activation à l'élément avec ID
someElementId
et à ses descendants.Voir la documentation pour plus de détails.
la source
[0]
pour spécifier un élément DOM réel (au lieu de l'objet jQuery) comme ceci:ko.applyBindings(myViewModel, $('#someElementId')[0])
C'est ma réponse après avoir terminé un très grand projet avec beaucoup de ViewModels en vue unique.
Affichage HTML
Pour cette vue, je crée 2 modèles de vue pour id = container1 et id = container2 dans deux fichiers javascript distincts.
Container1ViewModel.js
Container2ViewModel.js
Ensuite, après l'enregistrement de ces 2 modèles de vue en tant que modèles de vue distincts dans DataFunction.js
De cette façon, vous pouvez ajouter un nombre illimité de modèles de vues pour des divisions distinctes. Mais assurez-vous de ne pas créer de modèle de vue séparé pour un div à l'intérieur d'un div enregistré.
la source
Vérifiez le plugin MultiModels pour Knockout JS - https://github.com/sergun/Knockout-MultiModels
la source
Nous utilisons des composants pour y parvenir. ( http://knockoutjs.com/documentation/component-overview.html )
Par exemple, nous avons cette bibliothèque de composants que nous développons: https://github.com/EDMdesigner/knobjs
Si vous creusez dans le code, vous verrez que, par exemple, nous réutilisons le composant bouton-bouton à plusieurs endroits.
la source