Настройте дочерний маршрутизатор для создания модулей в HTML-привязке окна просмотра родительского маршрутизатора.

Цель: я хочу использовать преимущества разделения и инкапсуляции при использовании дочерних маршрутизаторов для организации маршрутов по важным функциональным областям приложения. Однако я хочу, чтобы эти маршруты обрабатывались и составлялись привязкой окна просмотра родительского маршрутизатора. то есть

<div id="parentRouterViewport" data-bind="router: { cacheViews: true }"><div>

До сих пор все, что я пробовал, включая звонки на родительский маршрутизатор для делегирования маршрута (в качестве эксперимента), не увенчалось успехом. Заставляет меня задуматься, возможно ли это вообще.

Для краткости я включаю только критически важные разделы кода для маршрутизации.

shell.js

return {
        router: router,
        activate: function() {
            return router.map([
                    { route: 'App*splat', moduleId: 'app/home/viewmodels/index', title: 'Home', nav: true }
                ]).buildNavigationModel()
                .mapUnknownRoutes('app/home/viewmodels/error')
                .activate();
        }
    };

shell.html

<div id="content" data-bind="router: { cacheViews: true }"></div>

index.js (дочерний модуль маршрутизации)

var childRouter = router.createChildRouter()
        .makeRelative({
            moduleId: 'app/home/viewmodels',
            fromParent: true
        }).map([
            { route: 'EligibiltySearch',    moduleId: 'eligibilitySearch',  title: 'Eligibility Search',    nav: true }
        ]).buildNavigationModel();

    return {
        router: childRouter
    };
});

Это работает только в том случае, если я помещаю привязку окна просмотра маршрутизатора в соответствующее представление index.html. Однако это не то, что мне нужно, основываясь на макете css и внешнем виде страницы, которые я пытаюсь разработать. Все должно быть представлено в виде панели и заменено на другую панель всякий раз, когда выполняется маршрут. В настоящее время этот подход будет иметь две постоянно открытые панели. Взгляните на фото ниже, чтобы лучше понять, что я имею в виду.

Фото проблемы макета CSS, описанной выше


person Matthew Cox    schedule 17.06.2015    source источник
comment
Вы пытаетесь добиться чего-то подобного этому примеру Durandal?   -  person Anish Patel    schedule 03.07.2015


Ответы (1)


В нашей команде мы создали собственные «дочерние маршрутизаторы», используя переменные Knockout для отображения/скрытия подвидов на основе нажатия кнопки вкладки. Одно предостережение заключается в том, что вам придется вызывать активацию, деактивацию, композициюComplete и т. д. из основного/родительского представления, чтобы заставить работать подпредставление. Есть и другие ошибки, но я решил дать вам это как вариант или другим, кто увидит этот вопрос позже.

person t1nr2y    schedule 21.09.2015