使用以下 Durandal子路由器插件配置时,我没有收到Durandal 生命周期中描述detached
的和activate
事件,而其他事件有效。
它是一个单页应用程序,其中包含容器的childRouter
控制内容。div
每个childRouter
对应一个模块,一次应该只有一个attached
,而其他应该是detached
.
该应用程序为每个模块使用单独的childRouter
实例,我希望每次发生两个模块之间的导航时都会触发detached
andactivate
事件(即moduleOLD
should getdetached
和moduleNEW
should get attached
)。
文档说 Durandal 生命周期事件是自动触发的:
以绿色突出显示的行将在撰写时始终执行。
它不能以这种方式工作,这可能是由以下原因引起的:
- 子路由器没有收到关于彼此连接/分离的通知(即需要订阅某些事件)
- 子路由器的工作方式与父路由器不同
看来我必须手动分离某些东西,或者通知正在更换的路由器,才能触发detached
和activate
.
如何触发detached
和activate
事件childRouter
?
define([ 'durandal/app', 'plugins/router'], function(
app, router) {
var childRouter = router.createChildRouter();
childRouter.makeRelative({
moduleId : 'modules/moduleX/pages',
fromParent : true
});
childRouter.map([ {
route : [ '', 'grid' ],
moduleId : 'grid/index',
}, {
route : 'details/:id',
moduleId : 'details/index',
}, {
route : 'details/tabs/base',
moduleId : 'details/tabs/base',
} ]);
childRouter.buildNavigationModel();
childRouter.activate = function() {
console.log("activate");//DOESN'T WORK
};
childRouter.attached = function() {
console.log("attached");//WORKS
};
childRouter.compositionComplete = function() {
console.log("compositionComplete");//WORKS
};
childRouter.detached = function() {
console.log("detached");//DOESN'T WORK
};
return {
router : childRouter
};
});
输出(无错误):
compositionComplete (gets called here too, when a route is first visited)
attached
compositionComplete