requireJs - Jquery UI自动完成功能不起作用

时间:2015-05-20 13:52:25

标签: requirejs

当我尝试将jqueru autocomplete与require js一起使用时出现以下错误:

'cannot call methods on autocomplete prior to initialization; attempted to call method '/recruiter/temp-search/api/locations/get''

我有一个启动自动完成功能的模块:

define(['jqueryUi'],function($) {

    function Location() {
        this.autocompleteUrl = "/recruiter/temp-search/api/locations/get";
    };

    Location.prototype.initAutocomplete = function($txtTown, onSuccessDelegate, countryId, regionId, ignoredInputHandler, includeCountries) {
        ///<param name="$txtTown" type="jQuery">input text element to decorate with autocomplete</param>
        ///<param name="onSuccessDelegate" type="function">Invoked with upon item selection with selected value passed as a parameter</param>
        ///<param name="regionId" type="int">Region constraint. Defaults to null</param>
        ///<param name="countryId" type="int">Country Id. Defaults to UK id</param>
        ///<param name="ignoredInputHandler" type="function">
        /// function(string term, function success(string term, {data, result, value}[] data), function failure(string term)) delegate
        /// that is invoked on autocomplete requests before user input at leaset 2 chars
        ///</param>

        var cId = countryId ? countryId : null;
        var rId = regionId ? regionId : null;
        var inclCountries = includeCountries === undefined ? false : includeCountries;
        var onSuccess = onSuccessDelegate ? onSuccessDelegate : function() {};

        $txtTown.autocomplete(this.autocompleteUrl, {
            dataType: 'json',
            parse: function(data) {

                /* validation Location*/
                /*To remove error field check on the parentsearch.js self.elements.searchLocation.on('keyup'*/
                if ($txtTown.selector === "#Location") {
                    if (data.Locations.length == 0 && !data.IsPostcode && $txtTown.val().length > 0) {
                        var locationError = "We couldn't find the location you entered";
                        jQuery("[data-valmsg-for = 'Location']").text(locationError);
                        $('#Location').closest('.search-row').find('.search-error').show();

                    } else {
                        jQuery("[data-valmsg-for = 'Location']").text("");
                    }
                }
                /**/
                var rows = [];
                if ($.isArray(data.Locations)) {
                    var locations = data.Locations;
                    if (locations !== null) {
                        for (var i = 0; i < locations.length; i++) {
                            rows[i] = { data: locations[i], value: locations[i], result: locations[i] };
                        }
                    }
                } else {
                    if (data.IsPostcode) {
                        onSuccess(data.Location, data.Postcode);
                    }
                }
                return rows;
            },
            extraParams: { countryId: cId, regionId: rId, includeCountries: inclCountries },
            formatItem: function(row) { return row; },
            width: 'auto',
            minChars: 2,
            delay: 100,
            max: 10,
            ignoredInputHandler: ignoredInputHandler,
            selectFirst: false,
            cacheLength: 1,
            scroll: false
        }).result(function(event, row) {
            onSuccess(row);
        });
    };

    return new Location();
});

它被称为:

location.initAutocomplete(this.elements.searchLocation, onSuccessAutocomplete, undefined, undefined, undefined, true);

这是我的配置文件:

require.config({
    paths: {
        "JqueryAutocomplete": "../scripts/jquery/plugins/jquery.autocomplete",
        "jqueryValidate": "../scripts/jquery/plugins/jquery.validate",
        "jqueryUi": "../scripts/jquery/plugins/jquery-ui-1.10.3.custom",
        "jquery": "../scripts/jquery/jquery-1.9.1",
        "knockout": "../scripts/knockout/knockout-2.3.0",
        "ko": "common/knockout-extensions"
    },

    shim: {
        "JqueryAutocomplete": {
            exports: "$",
            deps: ['jquery']
        },
        "jqueryValidate": {
            exports: "$",
            deps: ['jquery']
        },
        "jqueryUi": {
            exports: "$",
            deps: ['jquery']
        },
        "knockout-extensions": {
            exports: "knockout",
            deps: ['knockout']
        }
    }
});

0 个答案:

没有答案