2013-07-28 43 views
0

后迪朗达尔处置一个ViewModel的我可能是错误的轨道上,但这里有云:如何退出

在我的PhoneGap迪朗达尔的应用程序,我有一个个人资料查看/ VM只返回数据的第一次它被击中 - 之后,它会检查一个名为初始化的布尔值,并且不会在第二次再次击中数据库。这工作正常。

但是在注销之后,我需要使缓存无效。我可以使用一条消息告诉Profile VM清除变量(即使缓存无效),但我认为在Durandal中可能有更高级的方法 - 例如,在注销时,我告诉处理内存中的所有ViewModel(可能有其他Singleton对象,其中包含会话特定信息)。

建议,请...

回答

1

这更是一个JavaScript的问题,这只是我的javascript是如何工作的理解。

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

这是一个很好的article on how Garbage Collection作品。基本上它会处理在你的程序中不再被引用的对象。

在JavaScript中有另一种方法,允许您删除对象。该delete method

delete someobj; 

这也是我的知识是非常等于someobj = undefined;

希望这有助于。

***编辑

迪朗达尔遵循screen activator pattern为它的ViewModels。因此,除了viewmodel生命周期外,它将调用activate,candeactivate和deactivate方法。

你可以在停用方法中执行你的配置。

+0

使用'在JavaScript delete'关键字是不一样的东西设置为'undefined'。有重要的和显着的差异。在这里做一个快速搜索,你会发现很多关于差异的信息。 – CodingGorilla

+0

谢谢Evan,但我希望能有更多的Durandal生命周期类型的答案,而不是如何删除它们 - Durandal管理对象的状态,因此我可以告诉它何时处置它们。我目前正在使用Durandal的消息传递方面在我的ViewModels之间发送ClearCache消息,但我认为必须使用框架 – Rodney

+0

更清晰的方式,请参阅上面的我的编辑。 –

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/