Javascript 使用Knockout.js更新选择列表中的值

Javascript 使用Knockout.js更新选择列表中的值,javascript,knockout.js,Javascript,Knockout.js,我试图通过允许一个可编辑的价格而不是一个固定的值来修改knockout.js网站上找到的价格 现在,当页面加载时,列表和数据将正确填充。但是,如果从列表中选择新值,则该行的价格和id不会更改。总附加费会更改,但行本身不会更改。此外,如果我手动更改给定行的价格,则总附加费不会更改 我尝试将单个值设置为可观察值,如下图所示,但当选择新列表项时,价格和id值仍然不会更新,只有总附加费 function RowReservation(initialRow) { var self = this;

我试图通过允许一个可编辑的价格而不是一个固定的值来修改knockout.js网站上找到的价格

现在,当页面加载时,列表和数据将正确填充。但是,如果从列表中选择新值,则该行的价格和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部分已修复

如果我在任一行的某个文本框中更改价格,则仅当添加了另一行或另一行的名称已更改时,总附加费才会更新。基本上,它不是一个立即的变化,它只是在引入新值时计算的。如何使其自动更新?有没有办法订阅价格文本框**


您只需要在代码中修改HTML第17行中的这一部分

<input data-bind="value: price" />
如果您稍微更改一下变量名,您可能会更清楚。
我希望我讲得有道理。

您在实例化时设置了该值,因此该值不会绑定到输入框并正确返回到列表。给我一点时间更新你的小提琴。。。实际上,你的小提琴没有真正意义——你的可用行列表实际上只是行的一个副本,但不可见。你确定你想这样做吗?@PWKad我是新手,所以我想说这是一个误会,我不想这样做。谢谢你的帮助。它几乎按照我想要的方式工作。我还部分修复了上面列表中的第2项。如果我手动更改文本值,则仅当我添加另一行时,总附加费才会更新。如何修复此问题,以便在手动更改任何价格文本框时更新总附加费?实际上,这就是您需要的答案,不需要$data部分,但是当你这么做的时候,绑定仍然毫无意义,并且弄糟了,这就是为什么我提到,从根本上说,你试图做的事情出了问题。@PWKad正如我所说的,我不太确定该做什么。这对我来说都是新鲜事,所以如果你能帮助我,我会非常感激。我不知道我做错了什么,更确切地说,我不知道解决这个问题的正确方法应该是什么。@user3476345我看到小提琴的问题是,你试图做的事情毫无意义。您有一个项目列表,并且正在尝试添加新项目,但将每个项目绑定回原始列表。从根本上说,在您使用它的上下文中,它是没有意义的。@PWKad对的,我在问如何处理这个问题。我不知道该怎么办。我试图使原始列表成为一个可观察的列表,但这会导致其他错误。我应该把它绑定到一个新的列表上吗?
<input data-bind="value: $data.row().price"/>
// 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