Knockout.js 数据绑定:点击,在页面加载时运行

Knockout.js data-bind: click, runs on page load

我有一个带有 foreach 绑定的 table。我不想创建一个单击时会触发功能的按钮。相反,函数 运行s 会在页面加载时自动执行。

我试过使用带有 click 绑定的按钮或空 <td> 元素。结果是一样的。

CSHTML

<td>

  <button type="button" 
          class="btn btn-primary" 
          data-bind="click: QuickReplyToSpecificRequestByManager(@item.Id)"
  >Accept</button>

</td>

TS

public QuickReplyToSpecificRequestByManager(obs) {

    var data = {
        idToPass: obs,
        Description: "Approved",
        Status: 3
    };
    if (data.idToPass == undefined) {
        console.log("Id missing");
    } else {

        console.log(obs);
        $.post("/Request/SubmitReplyRequestDetails", data)
            .done(function () {
                console.log("Success");
                window.location.reload();
            });
    }
};

我希望 运行 仅在单击按钮时才起作用。

当您 applyBindings 时,knockout 会评估其所有绑定字符串。

click: QuickReplyToSpecificRequestByManager(@item.Id) 的情况下,它将通过计算 : 右侧的部分来初始化 click 绑定(: 的左侧)。 =19=]

因为 QuickRepl... 是一个函数,它后面跟着 ( ... ),它被调用了。

要修复它,您可以 bind 注入值而无需调用:

click: QuickReplyToSpecificRequestByManager.bind($data, @item.Id)