À 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
.