【发布时间】: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