2015-04-23 32 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