我试图通过允许可编辑的价格而不是固定值来修改knockout.js网站上找到的lists and collections tutorial。
现在,当页面加载时,列表和数据会正确填充。但是,如果我从列表中选择一个新值,则该行的价格和ID不会更改。总附加费变化,但行本身没有。此外,如果我手动更改给定行的价格,则总附加费不会改变。
我尝试将各个值设置为可观察值,如下所示,但是当选择新的列表项时,价格和ID值仍然不会更新,只有总附加费
function RowReservation(initialRow) {
var self = this;
self.row = ko.observable(initialRow);
self.rowID = ko.observable(self.row().rowID);
self.price = ko.observable(self.row().price);
}
所以我似乎无法弄清楚这两个问题
在列表中选择新项目时,相应的价格和ID不会更改
如果手动更改价格,则总附加费不会更新
编辑 - 我的列表中的第1个已修复,2个部分已修复。
如果我更改任一行的其中一个文本框中的价格,则只有在添加了另一行或更改了另一行的名称时才会更新总附加费。基本上,它不是立即改变,它仅在引入新值时计算。我怎样才能让它自动更新?有没有办法订阅价格文本框?**
答案 0 :(得分:0)
您需要在代码中修改的唯一内容是HTML的第17行中的这部分
<input data-bind="value: price" />
进入
<input data-bind="value: $data.row().price"/>
当你绑定价格&#39;最初,您将它绑定到RowReservation对象的price属性。当&#39;行&#39;价值改变了,价格的价值&#39;属性未更新。因此它仍然显示原始价格。
我更改了绑定,以便显示&#39; row&#39;的价格属性。所以,当&#39; row&#39;通过在组合框中选择不同的项目来更改,价格将更新为新选择的行的价格。
基本上你有
// RowReservationObject
{'row':
{'rowName': 'Standard',
'rowID': 1,
'price': 19.99 }, // --> this is what I'm binding against now
'rowID': 1
'price': 19.99} // -- this is what you were binding against before
如果稍微更改变量名称,可能会更清楚。 我希望我有道理。