Durandal:从shell访问子路由器功能

时间:2016-07-24 10:41:32

标签: javascript shell router durandal

在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();
            }
        },




1 个答案:

答案 0 :(得分:0)

如果你这样做的话,你会把孩子们紧紧地绑在一起。实现您在此处要求的最佳方式是使用event pub/sub capability of Durandal

本质上,每个子视图模型在加载时都会订阅事件,并在关闭时取消订阅。 shell上有前进/后退按钮,当它们被点击时,只需发布​​" ForwardNavigationRequested"或" BackwardNavigationRequested"当前子页面随后处理的事件。