0

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

在我的 PhoneGap Durandal 应用程序中,我有一个配置文件视图/VM,它只在第一次被命中时返回数据 - 之后它检查一个名为 initialized 的布尔值,并且第二次不会再次命中数据库。这工作正常。

但是注销后,我需要使缓存无效。我可以使用一条消息告诉 Profile VM 清除变量(即使缓存无效),但我认为在 Durandal 中可能有一种更高级别的方法来执行此操作 - 例如,在注销时,我告诉 dispose 内存中的所有 ViewModel (可能还有其他带有会话特定信息的 Singleton 对象)。

请指教...

4

2 回答 2

1

这更像是一个 javascript 问题,这只是我对 javascript 工作原理的理解。

Javascript 将通过称为垃圾收集的机制自动处理不再引用的对象。

这是一篇关于垃圾收集如何工作的好文章。基本上它会处理程序中不再引用的对象。

javascript 中有另一种方法允许您删除对象。删除方法:

delete someobj;

我的知识也差不多someobj = undefined;

希望这可以帮助。

***编辑

Durandal 的视图模型遵循屏幕激活器模式。因此,除了视图模型生命周期之外,它还将调用激活、取消激活和停用方法。

您可以在 deactivate 方法中进行处理。

于 2013-07-28T13:14:14.707 回答
0

(Durandal 2.0)您始终可以连接到视图模型上的组合生命周期回调方法。有四种:activate()、attached()、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/

于 2013-08-21T20:55:45.870 回答