3
在一個SPA中,我有一個視圖,在其中使用組合綁定包含另一個視圖。這個子視圖(子視圖)有一個激活方法,當父視圖被加載時被調用。Durandal撰寫:激活方法不總是調用
<div data-bind="compose: 'viewmodel/fol/index'"></div>
但是,當我瀏覽從父視圖離開,然後回去吧(不刷新瀏覽器),在子視圖的激活方法不再調用。我怎麼能強制這個被調用每次父視圖加載?
在一個SPA中,我有一個視圖,在其中使用組合綁定包含另一個視圖。這個子視圖(子視圖)有一個激活方法,當父視圖被加載時被調用。Durandal撰寫:激活方法不總是調用
<div data-bind="compose: 'viewmodel/fol/index'"></div>
但是,當我瀏覽從父視圖離開,然後回去吧(不刷新瀏覽器),在子視圖的激活方法不再調用。我怎麼能強制這個被調用每次父視圖加載?
由於您沒有在這裏利用路由器,子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。
真的很好問題btw –