在 Knockout Foreach 中自动执行单击绑定

deD*_*ari 3 javascript foreach jquery click knockout.js

我在 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>
Run Code Online (Sandbox Code Playgroud)

但是,一旦页面在循环中加载(无需单击),函数 deleteconfig 就会立即执行,直到它执行的时间与 foreach 循环执行的时间完全相同。

Reg*_*lez 6

确实,您需要绑定该函数。

data-bind="click: $parent.deleteconfig($data)"
Run Code Online (Sandbox Code Playgroud)

直接调用函数。

您可以改为使用:

data-bind="click: $parent.deleteconfig.bind($parent, $data)"
Run Code Online (Sandbox Code Playgroud)

为解释在这里

看到这个片段:

data-bind="click: $parent.deleteconfig($data)"
Run Code Online (Sandbox Code Playgroud)
data-bind="click: $parent.deleteconfig.bind($parent, $data)"
Run Code Online (Sandbox Code Playgroud)
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());
Run Code Online (Sandbox Code Playgroud)