1 viewmodel多个路由:生命周期

时间:2014-02-27 18:59:35

标签: knockout.js durandal

我希望有几个不同的路由指向同一个视图/视图模型,我已经成功实现了这一点。

            { route: 'formulation',             moduleId: 'formulation',    title: 'Formulation',       nav: 6 },
            { route: 'fabrication',             moduleId: 'test',           title: 'Fabrication',       nav: 7 },
            { route: 'fabrication/:studyId',    moduleId: 'test',           title: 'Fabrication'               },
            { route: 'characterization',        moduleId: 'test',           title: 'Characterization',  nav: 8 },

但是,我在生命周期中遇到了一些问题。当哈希从一个哈希变为另一个哈希时,我希望收到通知。例如制造到表征。理想情况下,我可以只更新一些变量,但我不反对重建view / viewmodel。问题是,有些人可能知道何时更改moduleId与之前的moduleId相同,而activate hook不会触发。究竟应该如何处理。 谢谢,  卡尔文

1 个答案:

答案 0 :(得分:4)

我认为您最好的选择是覆盖激活器上的areSameItem(由路由器创建为activeItem)。在应用程序的连线早期某处,尝试这样做:

var routerAreSameItem = router.activeItem.settings.areSameItem;

router.activeItem.settings.areSameItem = function (currentItem, newItem, currentActivationData, newActivationData) {
    debugger;
    return routerAreSameItem.apply(this, _.toArray(arguments));
};

显然,这个特定的实现不会做任何事情;但是您应该能够在areSameItem方法中提供一些自定义逻辑来区分项目更改。

如果我的记忆正常,那么从该方法返回false会使您的activate方法被调用。