0

嗨,我是构建网页应用程序的新手,我从 John Papa 的 HotTowel 视频开始,最初使用的是 HotTowel VSIX 模板。

当我决定更新到 Durandal 2.0 时,我遇到了应用程序无法从 shell 模块中的 activate 方法继续执行的问题。

经过一些谷歌搜索后,我发现问题必须与使用 jquery 承诺的 durandal 相关,我已经尝试了http://durandaljs.com/documentation/Q/中宣布的修复程序, 但它不起作用,有人能给我一些启示吗关于这个问题。

PS:我是 js 和 web 的新手,所以如果问题不够清楚,我很抱歉

在我的 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);
        }

    };
4

1 回答 1

0

您需要将路由传递给 router.activate() 函数以激活您的第一条路由。那是假设两件事-

  1. 您的 codecamper 后端消息正在触发,因为您的承诺正在返回
  2. 您已经添加了您引用的页面中显示的 jQuery 延迟到 Q 映射。

如果以上两个不正确,请告诉我您是否确实完成了第二个操作以及您的应用程序在哪里暂停或未加载

于 2013-08-28T12:08:08.113 回答