Javascript &引用;TypeError:undefined不是函数,Durandal SPA
我正在尝试创建简单的Durandal SPA,但是我有下面的错误,几个小时后,我找不到问题所在,我的唯一问题是可能是speakers.js顶部的数据服务定义,但不确定我的假设是否正确Javascript &引用;TypeError:undefined不是函数,Durandal SPA,javascript,jquery,durandal,Javascript,Jquery,Durandal,我正在尝试创建简单的Durandal SPA,但是我有下面的错误,几个小时后,我找不到问题所在,我的唯一问题是可能是speakers.js顶部的数据服务定义,但不确定我的假设是否正确 "TypeError: undefined is not a function at refresh (http://localhost:38945/App/speakers.js:21:16) at Object.activate (http://localhost:38945/App/speak
"TypeError: undefined is not a function
at refresh (http://localhost:38945/App/speakers.js:21:16)
at Object.activate (http://localhost:38945/App/speakers.js:17:20)
at tryActivate (http://localhost:38945/Scripts/durandal/composition.js:112:44)
at Object.composition.bindAndShow (http://localhost:38945/Scripts/durandal/composition.js:491:13)
at Object.<anonymous> (http://localhost:38945/Scripts/durandal/composition.js:602:29)
at Object.<anonymous> (http://localhost:38945/scripts/vendor?v=CoGrntPfi-B6C9wW1BBGgsUzERM99npj7WHKHsHaK8U1:1:37083)
at l (http://localhost:38945/scripts/vendor?v=CoGrntPfi-B6C9wW1BBGgsUzERM99npj7WHKHsHaK8U1:1:35715)
at Object.s.fireWith [as resolveWith] (http://localhost:38945/scripts/vendor?v=CoGrntPfi-B6C9wW1BBGgsUzERM99npj7WHKHsHaK8U1:1:36527)
at Object.t.(anonymous function) [as resolve] (http://localhost:38945/scripts/vendor?v=CoGrntPfi-B6C9wW1BBGgsUzERM99npj7WHKHsHaK8U1:1:37507)
at Object.<anonymous> (http://localhost:38945/Scripts/durandal/viewEngine.js:167:25)"
speakers.js
define(['logger'], ['durandal/system'], function (logger, system) {
var getSpeakerPartials = function (speakerObservable) {
// reset the obersvable
speakerObservable([]);
//set ajax call
var option = {
url: '/api/speakers',
type: 'GET',
datatype: 'json'
};
//make call
return $.ajax(options)
.then(querySucceeded)
.fail(queryFailed);
function querySucceeded(data) {
var speakers = [];
data.sort(sortSpeakers);
data.forEach(function (item){
var s = new model.SpeakerPartial(item);
speaker.push(s);
});
speakerObservable(speakers);
log('Retrieved speakes from dremote data source', speakers, true);
}
function queryFailed(jqXHR, textStatus) {
var msg = 'Error getting data. ' + textStatus;
logger.log(msg,
jqXHR,
system.getModuleId(dataservice),
true);
}
function sortSpeakers(s1, s2) {
return (s1.firstName + s1.lastName > s2.firstName + s2.lastName) ? 1 : -1;
}
};
var dataservice = {
getSpeakerPartials: getSpeakerPartials
};
return dataservice;
function log(msg, data, showToast) {
logger.log(msg, data, system.getModuleId(dataservice), showToast);
}
});
define(['dataservice'], function (ds) {
debugger;
var speakers = ko.observableArray();
var initialized = false;
var vm = {
activate: activate,
speakers: speakers,
title: 'Speakers',
refresh: refresh
};
return vm;
function activate() {
if (initialized) { return; }
initialized = true;
return refresh();
}
function refresh(){
ds.getSpeakersPartials(speakers);
}
}
);
还有我的vs studio结构,如果有帮助的话:如果你能正确地看到函数名是
getSpeakerPartials
,你把它叫做ds.getSpeakerPartials()
。我认为这就是问题所在
如果您正确地看到错误,它会在speakers.js的21
行上显示undefined不是函数。第21行是ds.getSpeakerPartials()
你能试试吗
define(['logger', 'durandal/system'], function (logger, system) {
而不是
define(['logger'], ['durandal/system'], function (logger, system) {
是的,我已经修复了,谢谢你指出,但仍然有另一个错误@L.V.SharepointArchitect你没有添加完整的屏幕截图,它没有显示行号和文件名。这是定义,请参阅@anand4tech的答案