durandal.js带参数的导航

时间:2013-08-05 09:14:12

标签: javascript single-page-application durandal sammy.js

我无法使用参数

从一个视图导航到另一个视图

来自: -

ViewModel : App/Foldername/page1.js
View : App/Foldername/page1.html

我想使用id参数:

ViewModel : App/Foldername/page2.js
    View : App/Foldername/page2.html

page1.js 中我写了以下内容,

self.goTopage2 = function (id) {
                            router.mapRoute('Foldername/page2/:id', 'viewmodels/Foldername/page2', 'This is page2view');
        };
shell.js

中的

 function boot() {
            router.mapNav('home');
            router.mapNav('details');
            router.mapNav('Foldername/page2');              
            log('Hot Towel SPA Loaded!', null, true);
            return router.activate('home');
        }
请告诉我正确的方法!

2 个答案:

答案 0 :(得分:0)

一种常见的方法是在某处获得路由列表并加载该列表。定义如下所示的列表时,需要使用router.map()映射路由,因为mapNav会创建不带参数的默认路由。包含路径的对象示例 -

var routes = [{
    url: 'home',
    moduleId: 'viewmodels/home',
    name: 'Home',
    visible: true,
    settings: {}
}, {
    url: 'events',
    moduleId: 'viewmodels/events/events',
    name: 'Events',
    visible: true,
    settings: {}
}, {
    url: 'eventdetails/:id',
    moduleId: 'viewmodels/events/eventdetails',
    name: 'Event Details',
    visible: false,
    settings: { event: true, show: false }
}];

如何映射这些路线 -

router.map(routes);

最后如何访问这些路线 -

router.activate('home');

var url = '#/fighterdetails/' + selectedFighter.id();
router.navigateTo(url);

答案 1 :(得分:0)

(DurandalJS 1.2.0)我不完全确定这是否是最好的方式,因为我对Durandal很新,但至少设法让它适用于此:

main.js

router.mapRoute('details/:id', 'viewmodels/details', 'Details', false);

list.js

loadDetails: function (id) {
    router.navigateTo('#/details/' + id);
},