2

我有一个半复杂的用户界面,除其他外,它保持用户输入的某些值的运行总数,以确保它们加起来达到 100%。由于每个数据项本身不知道所有其他数据项,因此我在主模型中使用计算的 observable 来处理此计算,而不是实际数据项本身的 observable。

我注意到,即使用户过滤列表(通过 ajax 调用),即使我用单个项目替换列表,似乎还有与所有现在丢失的项目相关的计算出的 observables,我猜这是因为我使用函数生成“动态”可观察值。

我试图在我的主“表”上使用 ko.cleanNode ,但这完全阻止了它的刷新。在这种情况下,处理计算的 observables 的正确方法是什么?

风景:

<span class="remainderText" data-bind="text:$root.getFieldTotal($data,'Customer')"></span>

该模型:

self.getFieldTotal = function (record, field) {
    return ko.computed(function () { 
                 .. some code here ...
            });
 }

当我去替换驱动 foreach 的 item 数组时,计算出的 observable 会触发,就好像所有旧的 item 仍然挂着一样。

4

1 回答 1

0

我对 knockoutjs 很陌生,所以我无法准确解释为什么会这样,但是如果你让你的 getFieldTotal 方法只是一个普通函数,而不是 ko.computed,那么你就会得到你需要的行为。看到这个小提琴...

http://jsfiddle.net/PggQJ/1/

于 2012-08-01T19:23:15.763 回答