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