web-dev-qa-db-fra.com

Comment forcer l'actualisation d'une vue sans l'avoir déclenchée automatiquement à partir d'un observable?

Note: ceci est principalement destiné au débogage et à la compréhension de KnockoutJS.

Existe-t-il un moyen de demander explicitement à Knockout d'actualiser la vue à partir du modèle de vue (déjà lié)? Je cherche quelque chose comme:

ko.refreshView();

Je comprends que ce n’est pas une utilisation prévue de Knockout, mais je veux tout de même savoir s’il existe une telle méthode de débogage et d’apprentissage.

146
THX-1138

Vous ne pouvez pas appeler quelque chose sur tout le viewModel, mais sur un observable individuel, vous pouvez appeler myObservable.valueHasMutated() pour informer les abonnés qu'ils doivent procéder à une nouvelle évaluation. Ce n'est généralement pas nécessaire dans KO, comme vous l'avez mentionné.

246
RP Niemeyer

Dans certaines circonstances, il peut être utile de simplement supprimer les liaisons, puis de réappliquer:

ko.cleanNode(document.getElementById(element_id))
ko.applyBindings(viewModel, document.getElementById(element_id))
24
ProfNimrod

J'ai créé un JSFiddle avec mon gestionnaire de liaison knockout bindHTML ici: https://jsfiddle.net/glaivier/9859uq8t/

Commencez par enregistrer le gestionnaire de liaison dans son propre fichier (ou dans un fichier commun) et à l'inclure après Knockout.

Si vous utilisez ceci changez vos liaisons à ceci:

<div data-bind="bindHTML: htmlValue"></div>

OR

<!-- ko bindHTML: htmlValue --><!-- /ko -->
0