Проблема Дюрандаля с Бризом и Q

Привет, я новичок в создании приложений для веб-страниц, я начал с видео HotTowel от Джона Папы и первоначально использовал шаблон HotTowel VSIX.

Когда я решил обновиться до Durandal 2.0, я столкнулся с проблемой, что приложение не переходит из метода активации в модуле оболочки.

После некоторого поиска в Google я обнаружил, что проблема связана с durandal, использующим обещания jquery, я попробовал исправление, объявленное в http://durandaljs.com/documentation/Q/, но он не работает, может кто-нибудь пролить свет на проблему.

PS: я новичок в js и в Интернете в целом, поэтому извините, если вопрос недостаточно ясен

в моем shell.js у меня есть:

function activate() {
    app.title = config.appTitle;


     return datacontext.primeData()
        .then(boot)
        .fail(failedInitialization);
}




function boot() {        
    logger.log('CodeCamper Backend Loaded!', null, system.getModuleId(shell), true);
    router.map(config.routes).buildNavigationModel();
    return router.activate();
}

function addSession(item) {
    router.navigateTo(item.hash);
}


function failedInitialization(error) {
    var msg = 'App initialization failed: ' + error.message;
    logger.logError(msg, error, system.getModuleId(shell), true);
}

и в моем контексте данных:

var primeData = function () {

        var promise = Q.all([
            getLookups(),
            getSpeakerPartials(null, true)])
            .then(applyValidators)

        return promise 
            .then(success);



        function success() {
            datacontext.lookups = {
                rooms: getLocal('Rooms', 'name', true),
                tracks: getLocal('Tracks', 'name', true),
                timeslots: getLocal('TimeSlots', 'start', true),
                speakers: getLocal('Persons', orderBy.speaker, true)
            };
            log('Primed data', datacontext.lookups);
        }

        function applyValidators() {
            model.applySessionValidators(manager.metadataStore);
        }

    };

person forcewill    schedule 28.08.2013    source источник


Ответы (1)


Вам нужно передать маршрут в функцию router.activate(), чтобы активировать ваш первый маршрут. Это предполагает две вещи -

  1. Ваше внутреннее сообщение codecamper срабатывает, потому что ваше обещание возвращается
  2. Вы добавили карту jQuery, отложенную в Q, показанную на странице, на которую вы ссылаетесь.

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

person PW Kad    schedule 28.08.2013
comment
Привет, в маршрутизаторе Durandal 2.0 мы больше не передаем маршрут к функции активации, насколько я понимаю, если просто вернуть router.activate без обещания datacontext.primeData, это сработает. - person forcewill; 28.08.2013
comment
Вы пытались обработать ситуацию сбоя в своем запросе, чтобы увидеть, не происходит ли сбой? Сцепите там .fail() и предупредите об ошибке - person PW Kad; 28.08.2013