我可能在这里走错了路,但这里有:
在我的PhoneGap Durandal应用程序中,我有一个Profile View / VM,它只会在第一次命中时返回数据 - 之后它会检查一个名为initialised的bool并且第二次不会再次命中DB。这很好用。
然而,在Logout之后,我需要使缓存无效。我可以使用一条消息告诉配置文件VM清除变量(即使缓存无效)但我想也许在Durandal中有更高级别的方法 - 例如在Logout上,我告诉处理内存中的所有ViewModel(可能还有其他具有会话特定信息的Singleton对象)。
建议请...
答案 0 :(得分:1)
这更像是一个javascript问题,这只是我对javascript如何运作的理解。
Javascript将自动处理不再通过名为Garbage Collection的机制引用的对象。
这是一个很好的article on how Garbage Collection作品。基本上它会处理程序中不再引用的对象。
javascript中还有另一种方法可以删除对象。 delete method:
delete someobj;
我的知识也非常等于someobj = undefined;
希望这有帮助。
***修改
Durandal遵循screen activator pattern的视图模型。因此,除了viewmodel生命周期之外,它还会调用activate,candeactivate和deactivate方法。
您可以在停用方法中进行处理。
答案 1 :(得分:0)
(Durandal 2.0)你总是可以在视图模型上使用组合生命周期回调方法。有四个:activate(),attach(),deactivate()和detached()。如果存在,Durandal会在您的视图模型上自动调用它们。在我的项目中,如果我需要一个视图来使其缓存无效,我会挂钩到deactivate()方法并将清理逻辑放在那里。同样,我使用detached()方法取消绑定事件并销毁UI小部件。
简单示例:
define(['modules/myDataService'],
function(dataservice) {
var cache;
function activate() {
return dataservice.getData().done(function(response) {
cache = response;
});
}
function deactivate() {
cache = null;
}
return {
activate: activate,
deactivate: deactivate
};
});
来源文档:http://durandaljs.com/documentation/Hooking-Lifecycle-Callbacks/