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' },

在应用程序/博客/

我有

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

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

谢谢

编辑:

这就是我的 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
});
4

1 回答 1

1

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

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 下载的 ko 文件夹中的示例

于 2013-10-28T19:34:35.430 回答