Child Routers durandal 2 HTML StarterKit

时间:2013-10-18 17:07:31

标签: routing durandal-2.0

我试图在durandal 2 starterkit中创建子路由,如http://durandaljs.com/documentation/Using-The-Router/所示,但没有成功。

我想要像http://mywebsite.com/#blog/post1/

这样的东西

所以在我的应用程序中,我在viewmodel中有一个shell文件viewmodel / shell.js

{ route: 'blog*details', title:'Blog', moduleId: 'blog/index', nav: 2, hash: '#blog' },

/ app /

中的

我有

index.js 
       index.js
       default/index.js
       default/index.html

为什么它不起作用我做错了什么?

THX

编辑:

这就是我的shell.js的样子

define(['plugins/router', 'durandal/app'], function (router, app) {

    return {
        router: router,
        attached : attached,
        search: function() {
            //It's really easy to show a message box.
            //You can add custom options too. Also, it returns a promise for the user's response.
            app.showMessage('Search not yet implemented...');
        },
        activate: function () {
            router.map([
                { route: '', title:'Home', moduleId: 'viewmodels/home', nav: 1 },
                { route: 'blog*route', title:'Blog', moduleId: 'blog/index', nav: 2, hash: '#blog' }
            ]).buildNavigationModel();

            return router.activate();
        },
        footerLinks : [
          ...
       ]
    };

      function attached() {

    }//=======attached end
});

1 个答案:

答案 0 :(得分:1)

一种方法是,您需要创建一个子路由器来处理您的splat路由blog*details 在index.js文件中(所以app / blog / index.js)你需要像这样创建子路由器。

define(['plugins/router'],function(router){
    var childRouter = router.createChildRouter().makeRelative({ moduleId: 'blog', fromParent: true})
        .map([
            ...insert routes here...
        ]).buildNavigationModel();
    return {
        router: childRouter
    };
});

从那时起,您可以创建所有路线,如blog / post1,blog / post2等。看看HTML Samples.zip download

的ko文件夹中的示例