2016-04-08 13 views
1

erwartet, wenn ich ein Element in einer beobachtbaren Matrix aus der Sicht entfernt werden soll, könnte ich so etwas tun ..Knockout: beobachtbaren Array Bindung Bindung klicken nicht als

<div data-bind="foreach: records"> 
    <input type="checkbox" data-bind="checked: isChecked, click: $parent.removeRow"> 
</div> 

dann in meinem Viewmodel ....

this.removeRow = function(item) { this.records.remove(item); } 

das funktioniert wie erwartet.

Allerdings dachte ich, das war ein zusätzlicher Schritt, warum nicht versuchen,

click: $parent.records.remove 

denken, dass $data würde entfernen weitergegeben werden. Das funktioniert nicht, und ich bekomme Uncaught TypeError: this.peek is not a function

Ich dachte, vielleicht weil das Ereignis als zweiter Parameter übergeben wurde, die Probleme werden könnten, mit remove() verursacht, also habe ich versucht:

click: _.unary($parent.records.remove) 

_.unary kehrt eine Funktion, die nur einen Parameter benötigt. Das hat auch nicht funktioniert und ich habe den gleichen Fehler bekommen.

Antwort

1

Es funktioniert nicht, da this nicht das records Array ist, wenn die click Bindung die remove Methode aufruft.

Sie können dieses Problem beheben, bei der Verwendung von bind:

click: $parent.records.remove.bind($parent.records) 

Meiner Meinung nach Ihrer ursprüngliche Lösung mit der dedizierten removeRow Funktion auf Ihrem View-Modell ist eine saubere Lösung.

Verwandte Themen