在router.map中,我有以下内容:
{ route: '01_02_003*details', moduleId: 'viewmodels/chapter2/01_02_003', title: 'Chapter 2 Page 3', nav: true },

在shell.js中我有以下内容。子路由器的所有功能都有效,但我希望shell.js中的Next和Back按钮能够复制1.js,2.js,3.js,4.js内部Next和Back按钮的功能。和5.js,它们是子路由器视图模型。有没有办法从shell.js引用子路由器viewmodel函数?从子路由器我可以调用$ shell.functionNameHere或$ shell.observableNameHere,但反过来似乎没有用。
createChapter2Router: function() {
if (!$shell.chapter2Router) {
$shell.chapter2Router = router.createChildRouter()
.makeRelative({
moduleId: 'viewmodels/chapter2/childRouter',
fromParent: true
}).map([
{ route: ['', '1'], moduleId: '1', title: 'Chapter 2 - Child Router', type: 'intro', nav: true },
{ route: ['2'], moduleId: '2', title: 'Chapter 2 - Child Router', type: 'intro', nav: true },
{ route: ['3'], moduleId: '3', title: 'Chapter 2 - Child Router', type: 'intro', nav: true },
{ route: ['4'], moduleId: '4', title: 'Chapter 2 - Child Router', type: 'intro', nav: true },
{ route: ['5'], moduleId: '5', title: 'Chapter 2 - Child Router', type: 'intro', nav: true },
]).buildNavigationModel();
}
},

答案 0 :(得分:0)
如果你这样做的话,你会把孩子们紧紧地绑在一起。实现您在此处要求的最佳方式是使用event pub/sub capability of Durandal。
本质上,每个子视图模型在加载时都会订阅事件,并在关闭时取消订阅。 shell上有前进/后退按钮,当它们被点击时,只需发布" ForwardNavigationRequested"或" BackwardNavigationRequested"当前子页面随后处理的事件。