使用knockoutjs加载数据时推迟依赖关系

时间:2012-02-02 02:14:22

标签: knockout.js

当我的用户登录时,我从服务器加载了一堆数据。这需要花费很多时间,因为似乎依赖的observable在observableArray()的每次添加时都会更新。我想推迟所有依赖项的评估,直到加载所有数据。我已经看到deferEvaluation: true如何用于影响特定ko.computed()变量的行为,但我想隔离observable直到我知道它已经完成更新,然后使整个模型无效以重绘风景。

我创建了一个jsfiddle来说明问题。请注意,在我的实际代码中,我使用映射插件来加载对象,但在这里我只使用.subscribe函数模拟所有依赖项,并在每次状态更改时调用它。我想阻止它被调用直到最后。

1 个答案:

答案 0 :(得分:4)

通常,在这种情况下,您将从observableArray访问底层数组并推送到它。然后,您可以将最后一个推送到observableArray或调用myObservableArray.valueHasMutated()

因此,一般来说它看起来像:

var underlyingArray = this.items();
underlyingArray.push(one);
underlyingArray.push(two);
underlyingArray.push(three);
this.items.valueHasMutated();

在你的小提琴中,你可以做this.document().history().push(this);。然后,如果您希望订阅运行,则必须返回并在受影响的文档上调用valueHasMutated()。