每隔一段时间,我就有一个可观察的,我需要“重置”它的默认值,例如当我刚刚向服务器发送一些新数据并获得成功回发时。我经常这样做:
self.dataToSend = ko.observable();
self.dataToSend(self.getPayload());
// send data, in success promise do this:
self.dataToSend = ko.observable();
这种方法有什么问题吗?垃圾收集会自动从内存中获取旧的observable吗?
答案 0 :(得分:5)
没有。这是创建一个 new observable。
这个 new observable 不是在先前绑定中绑定的相同observable - 通过'data-bind'或其他可观察的依赖关系图。也就是说,代码有效打破了 KO的可观察模型。
与重用相同可观察对象的self.dataToSend(undefined)
进行比较。
在某些[罕见]情况下,有一个可观察的 可观察的是有意义的 - 但外部容器observable仍应通过可观察的写入重新分配。
到目前为止是可观察的生命周期:通过创建一个新的observable并将其指定为属性,之前的observable不再可以通过该属性强烈访问.. 但是,“旧的”observable仍然是从所有先前建立的可观察依赖关系图中引用,因此不太可能限制“旧”可观察对象的生命周期,或者使其有资格进行GC回收。
因此,如果不删除整个相关的可观察依赖图,最好只更新相同的observable,这样可以避免创建断开连接的孤立依赖项。