我有一个剔除视图模型,它具有一个称为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');
}
});
});
最佳答案
首先,您不需要使updatePrices可计算,因为它不返回任何值,并且不依赖于任何其他视图模型变量。
其次,您的点击数据绑定不正确,因为您将立即调用该函数。您的数据绑定应如下所示:
<input type="checkbox" data-bind="checked: print, click:updatePrices" />