重置Observables - 我做得对吗?

时间:2013-11-25 00:54:00

标签: knockout.js

每隔一段时间,我就有一个可观察的,我需要“重置”它的默认值,例如当我刚刚向服务器发送一些新数据并获得成功回发时。我经常这样做:

 self.dataToSend = ko.observable();
 self.dataToSend(self.getPayload());
 // send data, in success promise do this:
 self.dataToSend = ko.observable();

这种方法有什么问题吗?垃圾收集会自动从内存中获取旧的observable吗?

1 个答案:

答案 0 :(得分:5)

没有。这是创建一个 new observable。

这个 new observable 是在先前绑定中绑定的相同observable - 通过'data-bind'或其他可观察的依赖关系图。也就是说,代码有效打破了 KO的可观察模型。

与重用相同可观察对象的self.dataToSend(undefined)进行比较。

在某些[罕见]情况下,有一个可观察的 可观察的是有意义的 - 但外部容器observable仍应通过可观察的写入重新分配。


到目前为止是可观察的生命周期:通过创建一个新的observable并将其指定为属性,之前的observable不再可以通过该属性强烈访问.. 但是,“旧的”observable仍然是从所有先前建立的可观察依赖关系图中引用,因此不太可能限制“旧”可观察对象的生命周期,或者使其有资格进行GC回收。

因此,如果不删除整个相关的可观察依赖图,最好只更新相同的observable,这样可以避免创建断开连接的孤立依赖项。