注销后如何在Durandal中处理ViewModel

时间:2013-07-28 10:37:53

标签: requirejs durandal

我可能在这里走错了路,但这里有:

在我的PhoneGap Durandal应用程序中,我有一个Profile View / VM,它只会在第一次命中时返回数据 - 之后它会检查一个名为initialised的bool并且第二次不会再次命中DB。这很好用。

然而,在Logout之后,我需要使缓存无效。我可以使用一条消息告诉配置文件VM清除变量(即使缓存无效)但我想也许在Durandal中有更高级别的方法 - 例如在Logout上,我告诉处理内存中的所有ViewModel(可能还有其他具有会话特定信息的Singleton对象)。

建议请...

2 个答案:

答案 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/