KnockoutJS supprime l'élément du tableau observable. L'élément est listitem dans ul, qui a été généré par foreach

À l'aide de KnockoutJS, comment puis-je supprimer un élément d'un tableau observable? Je veux pouvoir cliquer sur le listitem et supprimer l'élément du tableau (et donc de la liste).

L'exemple de code ci-dessous indique: 'this.expertise is indefined'.

Dois-je définir une sorte d'objet d'expertise, puis l'appeler depuis dedans?

<ul data-bind="foreach: expertise"> <li data-bind="text: Key, click: $parent.removeExpertise"></li> </ul> <script type="text/javascript"> $(function () { function AppViewModel() { this.removeExpertise = function (expertise) { this.expertise.remove(expertise); }; this.expertise = ko.observable([ { Key: 'Charles', Value: 'Charlesforth' }, { Key: 'Denise', Value: 'Dentiste' } ]); } // Activates knockout.js jQuery(document).ready(function () { ko.applyBindings(new AppViewModel()); }); }); </script> 

Lorsque vous appelez une méthode de l'enfant, this sera réglé sur l'enfant plutôt que sur $parent .

Il existe plusieurs façons de s'assurer que removeExpertise est appelée avec la valeur appropriée pour this . Un moyen simple est d'utiliser .bind .

Il ressemblerait à:

 this.removeExpertise = function (expertise) { this.expertise.remove(expertise); }.bind(this); 

En outre, vous voudrez que l' expertise soit une méthode observableArray plutôt qu'un observable , car un observableArray expose des méthodes de manipulation de tableau incluant une fonction de remove .