我希望有几个不同的路由指向同一个视图/视图模型,我已经成功实现了这一点。
{ 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不会触发。究竟应该如何处理。 谢谢, 卡尔文
答案 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
方法被调用。