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正在掩盖它。到目前为止,这是杜兰达尔最大的骗局。我希望我能找到一种更容易找出这些错误所在的方法。