Comment exécuter le code après Knockout JS a mis à jour le DOM

Dans le cadre de mon point de vue, j'ai:

<ul data-bind="foreach: caseStudies"> <li><a data-bind="text: title, attr: { href: caseStudyUrl }"></a></li> </ul> 

Je souhaite exécuter un code tiers, une fois que knock-out a mis à jour le DOM.

 caseStudies(data); thirdPartyFuncToDoStuffToCaseStudyLinks(); <-- DOM not updated at this point. 

Une idée sur la façon dont je peux me connecter au knock-out pour appeler cela au bon moment?

L'utilisation de la liaison afterRender peut vous aider.

 <ul data-bind="foreach: { data:caseStudies, afterRender:checkToRunThirdPartyFunction }"> <li><a data-bind="text: title, attr: { href: caseStudyUrl }"></a></li> </ul> function checkToRunThirdPartyFunction(element, caseStudy) { if(caseStudies.indexOf(caseStudy) == caseStudies().length - 1){ thirdPartyFuncToDoStuffToCaseStudyLinks(); } } 

Une façon précise est d'utiliser le fait que KnockoutJS applique les liaisons séquentiellement (car elles sont présentées en html). Vous devez définir un élément virtuel après l'élément 'foreach-bound' et définir une liaison 'text' qui appelle votre fonction tierce.

Voici html:

 <ul data-bind="foreach: items"> <li data-bind="text: text"></li> </ul> <!-- ko text: ThirdParyFunction () --> <!-- /ko --> 

Voici le code:

  $(function () { var data = [{ id: 1, text: 'one' }, { id: 2, text: 'two' }, { id: 3, text: 'three' } ]; function ViewModel(data) { var self = this; this.items = ko.observableArray(data); } vm = new ViewModel(data); ko.applyBindings(vm); }); function ThirdParyFunction() { console.log('third party function gets called'); console.log($('li').length); }