【问题标题】:How to avoid knockout bindings being called at page load?如何避免在页面加载时调用淘汰绑定?
【发布时间】:2014-07-06 10:02:57
【问题描述】:

我有一个淘汰视图模型,它有一个名为updatePrices 的计算函数。永远不应调用此方法,除非用户在我的表格中切换复选框。

该表是由 foreach 数据绑定生成的。

我目前的经验是updatePrices 方法在页面加载时为表格中的每一 行调用,然后在用户切换复选框时调用。我期望的行为是它只在我切换复选框时调用updatePrices,而不是在页面加载时调用。

所以我基本上想避免在页面加载时调用这些方法。我该怎么做?

我的 html 标记:

<tbody data-bind="foreach: invoices">
    <tr>
        <td>
            <input type="checkbox" data-bind="checked: print, click:updatePrices()" />
        </td>
        <td data-bind="text: invoiceDate"></td>
        <td data-bind="text: customerName"></td>
        <td data-bind="text: amount"></td>
        <td>
            <a data-bind="attr: { href: pdfLink }">Download</a>
        </td>
        <td data-bind="text: status"></td>
    </tr>
</tbody>

我的淘汰功能

self.updatePrices = ko.computed(function () {
    $.ajax({
        url: '/SingleLetter/GetPriceFromUrl',
        type: 'POST',
        data: {
            pdfUrl: self.pdfLink,
        },
        dataType: 'json',
        success: function (data) {
            self.jsonPrice(data.price);

        },
        error: function (file, responseText) {
            console.log('Price error');

        }
    });

});

【问题讨论】:

  • 我不认为你在那里使用计算函数。您正在根据用户操作从服务器获取数据。那么当页面加载或用户事件从服务器获取数据时?
  • 也许,我对 Knockout 很陌生 :) 但是当我调用它时,我认为它是一个计算函数,就像我的任何模型都有一个 ko.computed 函数一样?
  • 当你使用计算函数时,只要这个计算函数中的任何 observable 发生变化,你的计算函数就会被计算。当您需要对 observable 进行一些计算和转换时,您应该使用计算函数。你为什么首先使用计算函数?
  • 可能是因为我还不太了解 Knockout。但是如果我删除 ko.computed 并只使用一个函数,也会发生同样的情况。知道为什么吗?

标签: javascript jquery knockout.js


【解决方案1】:

首先,您不需要使 updatePrices 可计算,因为它不返回任何值,也不依赖任何其他视图模型变量。

其次,您的 click 数据绑定不正确,因为您正在立即调用该函数。您的数据绑定应如下所示:

 <input type="checkbox" data-bind="checked: print, click:updatePrices" />

【讨论】:

  • 非常感谢!现在我的复选框坏了,但这可能是其他一些错误;)我会去取。谢谢,周日好!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-01-10
  • 2018-02-14
  • 1970-01-01
  • 2014-02-10
  • 1970-01-01
  • 2015-09-28
相关资源
最近更新 更多