Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/69.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript &引用;TypeError:undefined不是函数,Durandal SPA_Javascript_Jquery_Durandal - Fatal编程技术网

Javascript &引用;TypeError:undefined不是函数,Durandal SPA

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

我正在尝试创建简单的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/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的答案