提问者:小点点

错误:类型错误:$(...).selectpicker不是使用requirejs加载的函数库


错误:TypeError:$(…). selectpicker不是第一次打开Web应用程序时发生的函数错误。

在我的app.js

requirejs.config({
    baseUrl: '',
    paths: {
        "jquery": "js/jquery",
        "jquery-ui": "js/jquery-ui",
        text: "lib/text",
        //"css": "css",
        handlebars: 'js/handlebars',
        moment: "js/moment.min",
        bootstrap: 'js/bootstrap.min',
        somtjquery: 'widgets/somt/js/somtjquery',
        bootstrapselect: 'js/bootstrap-select',
        utils: 'widgets/somt/js/utils',
        filterwidget: 'widgets/somt/js/filterwidget'
    },  
    shim: {
        handlebars: {
            exports: 'Handlebars'
        },
        'bootstrap': {
            deps: ['jquery']
        },
        //'bootstrapdatepicker':{deps: ['jquery','bootstrap']},
        'somtjquery': {
            deps: ['jquery', 'utils', 'bootstrap']
        },
        'bootstrapselect': {
            deps: ['jquery', 'bootstrap']
        },
        'jquery': {
            exports: '$'
        },
        "datepicker": {
            deps: ["jquery-ui", "bootstrap"],
            exports: "$.fn.datepicker"
        },
        'tooltip': {
            deps: ['jquery'],
            exports: '$.fn.tooltip'
        },
        'filterwidget': {
            deps: ['jquery', "jquery-ui", "bootstrap", "bootstrapselect"],
            exports: 'filterwidget'
        }
    }
});

In filterwidget.js

define(["handlebars",'hbs!widgets/somt/templates/pfilter'],function(Handlebars,filter){
    var selector = "#somt-filter-area";
    $(selector).html(filter);
    $(function selectDatePicker() {
        try {
            $(selector).find('.selectpicker').selectpicker();
        } catch (e) {
            console.log("Date select err message : " + e);
        }
        try {
            $(selector).find("#week").datepicker({
                showOn: "button",
                buttonImage: "images/common-calendar-month-glyph.svg",
                buttonImageOnly: true,
                firstDay: 1,
                beforeShowDay: function(date) {
                    return [date.getDay() === weekofday, ""];
                },
                dayNamesMin: ["Sun", "Mon", "Tue", "Wed", "Thu", "Fri", "Sat"],
                maxDate: currentcutoffday,
                dateFormat: 'mm/dd/yy'
            });
        } catch (e) {
            console.log("Date picker err message : " + e);
        }
    });
});

特别是我在Firefox 36及更低版本中遇到了错误


共1个答案

匿名用户

您误解了如何使用shim。配置没有filterwidget的正确依赖项。必须仅对非amd库使用“shim”。如果文件具有定义函数,则它的amd模块和shim对于该模块不是必需的。从shim中删除此代码:

'filterwidget': {
        deps: ['jquery', "jquery-ui", "bootstrap", "bootstrapselect"],
        exports: 'filterwidget'
    }

并在 filterwidget 中设置过滤器小部件的所有依赖项.js:

define(['jquery',“jquery-ui”,“bootstrapselect”,“handlerbs”,“bbs!widgets/somt/templates/pfilter']

PS:同时从填充程序中删除 jquery、jquery-ui。这是AMD库。你怎么知道?看看图书馆的开头就知道了。例如'jquery-ui'。如果有这样的内容:

if ( typeof define === "function" && define.amd ) {

    // AMD. Register as an anonymous module.
    define([ "jquery" ], factory );
} else {

    // Browser globals
    factory( jQuery );
}

则不需要垫片。