2015-04-23 26 views
3

在一个SPA中,我有一个视图,在其中使用组合绑定包含另一个视图。这个子视图(子视图)有一个激活方法,当父视图被加载时被调用。Durandal撰写:激活方法不总是调用

<div data-bind="compose: 'viewmodel/fol/index'"></div> 

但是,当我浏览从父视图离开,然后回去吧(不刷新浏览器),在子视图的激活方法不再调用。我怎么能强制这个被调用每次父视图加载?

+0

真的很好问题btw –

回答

2

由于您没有在这里利用路由器,子ViewModel的行为将不会考虑完整的激活生命周期。您可以采取两种方法:(a)利用路由器或(b)手动激活孩子。

如果您想采取第一种方法,您将在viewModel上创建子路由器,并创建router绑定而不是compose绑定。在这种情况下,这可能是矫枉过正的,所以我会跳过它。

根据您在此提供的信息,更好的方法是不要尝试自动挂钩到激活生命周期。因此,而不是打电话给你activate()功能激活,称之为init()

function folIndexViewModel() { 

    this.init = function() { 
    ... 
    }; 
} 

在你的父母,让您激活函数调用初始化

var child = require('viewmodel/fol/index'); 
function parentViewModel() { 

    this.activate = function() { 
     child.init(); 
    } 
} 

注意,如果你的孩子是一个单独的这种方法才有效。有关这篇文章底部的更多信息:http://durandaljs.com/documentation/Creating-A-Module.html