我试图在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
为什么它不起作用我做错了什么?
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
});
答案 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文件夹中的示例