在knockout.js中,当我的items数组被替换后,如何删除分离的ko.observables?

时间:2012-06-19 18:45:05

标签: knockout.js

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

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

我试图在我的主'表'上使用ko.cleanNode,但这只是阻止了它的刷新。在这种情况下处理计算的可观察量的正确方法是什么?

视图:

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

模特:

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

当我去更换驱动foreach的项目数组时,计算出的observable会像所有旧项目仍然悬空一样触发。

1 个答案:

答案 0 :(得分:0)

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

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