В durandaljs my nav a теги не загружаются мои маршруты

Я только что обновил свой проект до durandaljs 2.0. Кажется, все работает нормально, в том смысле, что если я введу URL-адрес маршрута в адресную строку браузера и нажму "Ввод", он прекрасно загрузит представление для хэш-маршрута. Это работает для всех моих маршрутов.

Но если я нажму на кнопку панели навигации, которая имеет точно такие же маршруты хэшей в href, URL-адрес браузера изменится на правильный URL-адрес (тот, который работает, если я нажму enter, в адресной строке), но представление не загружается.

Это почти как router.navigate без триггера вызывается.

На самом деле я попытался вручную вызвать route.navigate("#xyz", { replace: false, trigger: true }), но это также не загружает представление xyz.

Я пропускаю что-то глупое здесь - есть идеи?

из shell.js:

activate: function () {
    $.getJSON("/Account/GetCurrentUser").done(function (data, textStatus, jqXHR) {
        shell.user(data);
    });


    $(document).ajaxError(function (xhr, props) {
        if (props.status === 401) {
            window.location = "/Account/Login";
        }
    });

    router.map([
        { route: '', title: 'Jobs', moduleId: 'viewmodels/jobs', nav: true },
        { route: 'companies', title: 'Companies', moduleId: 'viewmodels/companies', nav: true },
        { route: 'profile', title: 'Profile', moduleId: 'viewmodels/profile', nav: true },
        { route: 'users', title: 'Users', moduleId: 'viewmodels/users', nav: true, hash: '#users' },
        { route: 'jobs(/filter/:filter)(/group/:group)(/sort/:sort)(/page/:page)', title: 'Jobs', moduleId: 'viewmodels/jobs', nav: false },
        { route: 'companies(/filter/:filter)(/group/:group)(/sort/:sort)(/page/:page)', title: 'Companies', moduleId: 'viewmodels/companies', nav: false }

        //,{ route: 'flickr', moduleId: 'viewmodels/flickr', nav: true }
    ]).buildNavigationModel();

    //router.mapNav('details');
    //router.mapNav('airports');
    //router.mapNav('emptylegs');

    return router.activate();
}

из nav.html:

<nav class="navbar navbar-fixed-top" style="max-height:68px">
    <div class="navbar-inner">
        <a class="brand" href="/">
            <span class="title"></span>
        </a>        
        <div>
            <ul class="nav" data-bind="foreach: router.navigationModel">
                <li><a data-bind="css: { active: isActive }, attr: { href: hash }, text: title"
                    class="btn btn-info" href="#"></a>
                </li>
            </ul>
        </div>
    </div>
</nav>

Спасибо

1 ответ

Решение

Я не знаю, в этом ли проблема, но в a связывая вы меняете HREF с нокаутом, а затем настройки href="#" снова.

<a data-bind="css: { active: isActive }, attr: { href: hash }, text: title"
                class="btn btn-info" href="#"></a>

Не может быть причиной проблемы. Но это не выглядит хорошо..

Кстати, также проверьте, что связывание с маршрутизатором выполнено правильно. В Durandal 2.0 это изменилось, поэтому в вашем shell.html у вас должно быть что-то вроде этого:

<!--ko router: { transition:'entrance', cacheViews:true }--><!--/ko-->

Вместо этого:

<!--ko compose: {
    model: router.activeItem, 
    afterCompose: router.afterCompose, 
    transition: 'entrance'
} -->
Другие вопросы по тегам