Requirejs Durandal-加载路由模块详细信息失败:未定义不是函数

Requirejs Durandal-加载路由模块详细信息失败:未定义不是函数,requirejs,durandal,Requirejs,Durandal,加载路由模块编辑/用户/索引失败的错误是什么。细节:未定义不是一个函数的意思吗 我间歇性地出现此错误,堆栈跟踪如下所示: logError system.js?bust=1398976887311:92 (anonymous function) router.js?bust=1398976887311:362 l jquery.min.js:6 c.fireWith jquery.min.js:6 (anonymous function) jquery.min.js:6 l jquery.min

加载路由模块编辑/用户/索引失败的错误是什么。细节:未定义不是一个函数的意思吗

我间歇性地出现此错误,堆栈跟踪如下所示:

logError system.js?bust=1398976887311:92
(anonymous function) router.js?bust=1398976887311:362
l jquery.min.js:6
c.fireWith jquery.min.js:6
(anonymous function) jquery.min.js:6
l jquery.min.js:6
c.fireWith jquery.min.js:6
i.(anonymous function) jquery.min.js:6
(anonymous function) system.js?bust=1398976887311:260
(anonymous function) require.js:129
(anonymous function) require.js:1154
each require.js:57
Module.emit require.js:1153
(anonymous function) require.js:529
each require.js:57
onError require.js:522
Module.check require.js:893
(anonymous function) require.js:1111
(anonymous function) require.js:129
(anonymous function) require.js:1154
each require.js:57
Module.emit require.js:1153
Module.check require.js:924
Module.enable require.js:1141
Module.init require.js:778
callGetModule require.js:1168
context.completeLoad require.js:1530
context.onScriptLoad
    define(['jquery', 'knockout', 'plugins/ajax'], function ($, ko,ajax) {
    'use strict';

    var obj = {};


    obj.loading = ko.observable(false);
    obj.activate = function () {

        obj.loading.subscribe(function (newValue) {
            if (newValue) {
                $.blockUI({
                    css: {
                        border: 'none',
                        padding: '15px',
                        backgroundColor: '#333',
                        '-webkit-border-radius': '10px',
                        '-moz-border-radius': '10px',
                        opacity: 0.9,
                        color: '#fff',
                        fontSize: '26px',
                        fontFamily: "'Helvetica Neue', Helvetica"
                    },
                    overlayCSS: {
                        opacity: 0.2,
                    },
                    message: '<span>Please wait...</span>',
                    fadeIn: 0
                });
            }
            else
                $.unblockUI();
        });

        obj.promise = $.when(
                   ajax.wrap('Durandal/GetUnitModel', { Id: '1' }, function (response) {
                       ajax.updateModel(obj, 'unitModel', response.Model);
                   }),
                   ajax.wrap('Durandal/GetUserModel', { Id: '1' }, function (response) {
                       ajax.updateModel(obj, 'userModel', response.Model);
                   }),
                   ajax.wrap('Durandal/GetOfficeModels', { Id: '1' }, function (response) {
                       ajax.updateModel(obj, 'Offices', response.Model);
                   }),
                   ajax.wrap('Durandal/GetUserGroupModels', { Id: '1' }, function (response) {
                       ajax.updateModel(obj, 'UserGroups', response.Model);
                   })
               );

        return obj.promise;

    };

    return obj;
});
define(['plugins/router', 'durandal/app', 'plugins/ajax', 'durandal/global', 'durandal/activator'], function (router, app, ajax, global, activator) {

    var vm = {};

    vm.global = activator.create();
    //call this to refresh menu items
    vm.rebuildRouter = function () {
        return ajax.wrap('Durandal/GetMenuItems', { menuName:'viewmodels/shell.js' }, function (response) { 
                vm.router.deactivate();
                vm.router.reset();
                vm.router.routes = [];
                vm.router.map(response.Model).buildNavigationModel();
                vm.router.activate();
            });
        /* { route: 'Map*details', title: 'Map', moduleId: 'map/index', nav: true, hash: '#Map' },*/

    };

    vm.activate = function () {
        var promise = vm.global.activateItem(global);

        return $.when(promise, vm.rebuildRouter());
    }

    vm.refreshUnit = function () {

        ajax.wrap('PostLogin/DurandalSwitchUnit', { unitId: vm.global().userModel.UnitId() }, function (response) { $.when(global.activate(),vm.activate()).then(function () { router.navigate();}); });

    };

    vm.router = router;

    return vm;
});
我有一个全局模块,如下所示:

logError system.js?bust=1398976887311:92
(anonymous function) router.js?bust=1398976887311:362
l jquery.min.js:6
c.fireWith jquery.min.js:6
(anonymous function) jquery.min.js:6
l jquery.min.js:6
c.fireWith jquery.min.js:6
i.(anonymous function) jquery.min.js:6
(anonymous function) system.js?bust=1398976887311:260
(anonymous function) require.js:129
(anonymous function) require.js:1154
each require.js:57
Module.emit require.js:1153
(anonymous function) require.js:529
each require.js:57
onError require.js:522
Module.check require.js:893
(anonymous function) require.js:1111
(anonymous function) require.js:129
(anonymous function) require.js:1154
each require.js:57
Module.emit require.js:1153
Module.check require.js:924
Module.enable require.js:1141
Module.init require.js:778
callGetModule require.js:1168
context.completeLoad require.js:1530
context.onScriptLoad
    define(['jquery', 'knockout', 'plugins/ajax'], function ($, ko,ajax) {
    'use strict';

    var obj = {};


    obj.loading = ko.observable(false);
    obj.activate = function () {

        obj.loading.subscribe(function (newValue) {
            if (newValue) {
                $.blockUI({
                    css: {
                        border: 'none',
                        padding: '15px',
                        backgroundColor: '#333',
                        '-webkit-border-radius': '10px',
                        '-moz-border-radius': '10px',
                        opacity: 0.9,
                        color: '#fff',
                        fontSize: '26px',
                        fontFamily: "'Helvetica Neue', Helvetica"
                    },
                    overlayCSS: {
                        opacity: 0.2,
                    },
                    message: '<span>Please wait...</span>',
                    fadeIn: 0
                });
            }
            else
                $.unblockUI();
        });

        obj.promise = $.when(
                   ajax.wrap('Durandal/GetUnitModel', { Id: '1' }, function (response) {
                       ajax.updateModel(obj, 'unitModel', response.Model);
                   }),
                   ajax.wrap('Durandal/GetUserModel', { Id: '1' }, function (response) {
                       ajax.updateModel(obj, 'userModel', response.Model);
                   }),
                   ajax.wrap('Durandal/GetOfficeModels', { Id: '1' }, function (response) {
                       ajax.updateModel(obj, 'Offices', response.Model);
                   }),
                   ajax.wrap('Durandal/GetUserGroupModels', { Id: '1' }, function (response) {
                       ajax.updateModel(obj, 'UserGroups', response.Model);
                   })
               );

        return obj.promise;

    };

    return obj;
});
define(['plugins/router', 'durandal/app', 'plugins/ajax', 'durandal/global', 'durandal/activator'], function (router, app, ajax, global, activator) {

    var vm = {};

    vm.global = activator.create();
    //call this to refresh menu items
    vm.rebuildRouter = function () {
        return ajax.wrap('Durandal/GetMenuItems', { menuName:'viewmodels/shell.js' }, function (response) { 
                vm.router.deactivate();
                vm.router.reset();
                vm.router.routes = [];
                vm.router.map(response.Model).buildNavigationModel();
                vm.router.activate();
            });
        /* { route: 'Map*details', title: 'Map', moduleId: 'map/index', nav: true, hash: '#Map' },*/

    };

    vm.activate = function () {
        var promise = vm.global.activateItem(global);

        return $.when(promise, vm.rebuildRouter());
    }

    vm.refreshUnit = function () {

        ajax.wrap('PostLogin/DurandalSwitchUnit', { unitId: vm.global().userModel.UnitId() }, function (response) { $.when(global.activate(),vm.activate()).then(function () { router.navigate();}); });

    };

    vm.router = router;

    return vm;
});

如果您能帮助调试,我们将不胜感激。还有其他人遇到过这样的错误吗?这是什么意思?它甚至可以帮助您大致了解要查找的位置,为什么Durandal会抛出此错误,它说某些内容“未定义”,但在这种情况下,它要查找哪些未定义的内容?

假设您使用的是Durandal 2.x,请在全局模块中更改以下行:

define(['jquery', 'knockout', 'plugins/ajax'], function ($, ko,ajax) {...
为此:

define(['knockout', 'plugins/ajax'], function (ko,ajax) {...

看看这是否解决了问题。

这个错误消息让我陷入了数小时的疯狂追逐

最终,我发现并修复了我的代码中的一个错误,我试图使用下划线库,这就是失败的地方


如果您收到此错误消息,模块中的任何地方都可能出错。您可能在代码中的某个地方放置了u或$之类的符号,但它没有定义

我很难发布一个简单的完整js fiddle示例,因为我的模块需要来自服务器的数据才能继续激活,并且有太多的依赖项,所以我无法轻松发布一个完整的简单示例。此代码位于子计算机中,并在几个嵌套组件中加载。如果有人能帮助我或给出调试建议,我将不胜感激。谢谢,是的,我正在使用2.0,但是删除jquery并没有什么不同。堆栈跟踪只有durandal和requirejs代码,为什么你认为jquery可能与之有关?@pilavdzice我不确定。你的堆栈跟踪告诉了我这个想法。我曾经在jQuery中遇到过这个问题。让我进一步研究一下这个问题。不确定您在哪里指出这是Durandal的问题--这是一个JavaScript错误。这是一个JavaScript错误,源自Durandal中的一行代码,可能是由该行代码引起的,请参阅堆栈跟踪。由于一行durandal代码导致了js错误,我称之为durandal错误。根据您的建议,我已重新编写了上面的答案。然而,我的观点是,Durandal没有指向问题所在的代码行,而是默默地失败了,然后抛出了一个不相关的错误。@pilavdzice,我也遇到了同样的问题。我知道在链的某个地方,有一个javascript错误,但Durandal正在掩盖它。到目前为止,这是杜兰达尔最大的骗局。我希望我能找到一种更容易找出这些错误所在的方法。