如何避免在页面加载时调用knockout绑定?

时间:2014-05-18 10:24:08

标签: javascript jquery knockout.js

我有一个淘汰视图模型,它有一个名为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');

        }
    });

});

1 个答案:

答案 0 :(得分:4)

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

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

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