Подменю с дюрандалем

Пожалуйста, помогите, у меня есть маршрут пятна, который выглядит так.

админ*детали

Я создал дочерний маршрутизатор из ссылки администратора, как это.

var childRouter = router.createChildRouter().makeRelative({ moduleId: 'admin', route:'admin'})
    .map([
           {
            title: 'Case Files',
            route: 'default/index',
            moduleId: 'default/index',
            nav: true
           }
         ])
    .buildNavigationModel();


    var vm = {
        router: childRouter,
        activate: activate
    };

моя структура папок такова.

viewmodels\admin\admin
viewmodels\admin\default\index

Почему не выполняется переход на главную страницу?
Вместо этого я получаю сообщение об ошибке "Не удалось загрузить маршрутизируемый модуль".


person Mark Tan    schedule 13.10.2013    source источник


Ответы (2)


Всякий раз, когда я создаю дочерний маршрутизатор, я всегда использовал расширение fromParent : true. Кроме того, moduleId берется из корня родительского маршрутизатора, поэтому вы можете обнаружить, что что-то вроде этого работает.

var childRouter = router.createChildRouter()
    .makeRelative({ moduleId: 'viewmodels/admin', fromParent: true})
    .map([{
        title: 'Case Files',
        route: 'default/index',
        moduleId: 'default/index',
        nav: true
       }])
    .buildNavigationModel();
person Excommunicated    schedule 25.10.2013

Я думаю, что у вас есть очень простая ошибка здесь. При создании дочернего маршрутизатора вам необходимо указать маршрут по умолчанию вместе с вашим маршрутом, который вы предоставляете. Я не очень хорошо говорю, но вот:

var childRouter = router.createChildRouter()
.makeRelative({ moduleId: 'admin', route:'admin'})
.map([
       {
        title: 'Case Files',
        route: ['', 'default/index'],
        moduleId: 'default/index',
        nav: true
       }
     ])
.buildNavigationModel();


var vm = {
    router: childRouter,
    activate: activate
};

Вы также можете сделать это следующим образом:

var childRouter = router.createChildRouter()
.makeRelative({ moduleId: 'admin', route:'admin'})
.map([
       {
        title:'Case Files',
        route: '',
        moduleId: 'default/index',
        nav: true
       },
       {
        title: 'Case Files',
        route: 'default/index',
        moduleId: 'default/index',
        nav: true
       }
     ])
.buildNavigationModel();


var vm = {
    router: childRouter,
    activate: activate
};

Похоже, что, поскольку у вас нет этого начального дочернего маршрута по умолчанию, попытка перейти к /admin не имеет определенного маршрута, он ожидает /admin/default/index. Надеюсь, это поможет.

person Phatjam98    schedule 24.04.2014