2016-05-24 7 views
2

Ich habe in einer foreach-Schleife, klicken Sie enthalten Bindung wie folgt aus:Klicken Sie binden automatisch in Knockout Ausführung Foreach

<tbody data-bind="foreach: locationConfigSet"> 
     <tr> 
      <td data-bind="text: address"></td> 
      <td><a data-bind="attr: {href: 'http://maps.google.com/maps?z=12&t=m&q=loc:' + latitude + '+' + longitude}" target="_blank" class="btn btn-primary btn-xs">Map</a></td> 
      <td data-bind="text: allowance"></td> 
      <td><button class="btn btn-danger btn-xs" data-bind="click: $parent.deleteconfig($data)">Delete</button></td> 
     </tr> 
    </tbody> 

Aber die Funktion DeleteConfig wird immer, sobald die Seite ausgeführt wird geladen (ohne Klick) in eine Schleife, bis sie exakt zu den gleichen Zeiten ausgeführt wird wie die foreach-Schleife.

Antwort

3

In der Tat müssen Sie die Funktion binden.

data-bind="click: $parent.deleteconfig($data)" 

ruft die Funktion aufrichtig auf.

können Sie statt:

data-bind="click: $parent.deleteconfig.bind($parent, $data)" 

als here erklärt

dieses Snippet Siehe:

var elementVM = function(id) { 
 
    this.id = ko.observable(id); 
 
} 
 

 
var parentVM = function() { 
 
    this.list = ko.observableArray([new elementVM(0), new elementVM(1)]); 
 
    this.onclick = function(text) { 
 
    text(text() + 1); 
 
    } 
 
} 
 

 
ko.applyBindings(new parentVM());
.child { 
 
    width: 50px; 
 
    text-align: center; 
 
    border: 1px solid black; 
 
    background-color: yellow; 
 
    cursor: pointer; 
 
    }
<script src="https://cdnjs.cloudflare.com/ajax/libs/knockout/3.2.0/knockout-min.js"></script> 
 
<div data-bind="foreach: list"> 
 
    <div class="child" data-bind="click: $parent.onclick.bind($parent, $data.id), text: id"></div> 
 
</div>

+0

Vielen Dank. Habe diesen Teil total vermisst. Das hat funktioniert – deDishari