Javascript 如何将Jquery TimeEntry插件包含在RequireJS中

Javascript 如何将Jquery TimeEntry插件包含在RequireJS中,javascript,jquery,jquery-plugins,requirejs,amd,Javascript,Jquery,Jquery Plugins,Requirejs,Amd,我是新来的,我有一个旧的Asp.net Webform应用程序,我正在尝试使用它应用一些javascript模块加载。在这个应用程序中,我使用了一个名为的插件,但如果我使用它,它将不起作用,只有在我以旧方式添加引用时才起作用。这是我的配置和声明。 在aspx文件中: <script src="../../scripts/require.js"></script> <script> require(["../../app/shared/require.c

我是新来的,我有一个旧的Asp.net Webform应用程序,我正在尝试使用它应用一些javascript模块加载。在这个应用程序中,我使用了一个名为的插件,但如果我使用它,它将不起作用,只有在我以旧方式添加引用时才起作用。这是我的配置和声明。 在aspx文件中:

<script src="../../scripts/require.js"></script>
<script>
    require(["../../app/shared/require.config"],
        function (config) {
            require(["appIncidentTracking/incident-type-init"]);
        });

</script>
在我的事件类型init.js中,我只调用插件:

/**
 * Incident Type Init page 
 * @module incident-type-init
 */
define(function (require) {
    var $ = require('jquery'),
        jqueryplugin = require('jqueryplugin'),
        timeentry = require('timeentry'),
        bootstrap = require('bootstrap');

    /**
     * Jquery ready function
     */
    $(function () {
        $('.js-timeentry').timeEntry();
    });
});
但当应用程序运行时,我遇到了以下错误: $.JQPlugin.createPlugin不是一个函数,就像找不到jquery.plugin.js

我检查了chrome中的网络选项卡,两个文件都已加载,jquery.plugin.jsjquery.timeentry.js

更新:在我们的应用程序中,我们正在使用Asp.net母版页,我们正在加载旧版本1.5.1,我在我的页面中使用该母版页,但当我在chrome中检查网络选项卡时,首先加载母版页脚本,然后加载所有内容

最有趣的是,有时有效,有时无效


有什么线索吗?

我认为您的代码在语法上不正确

试试这个:

1。您的
脚本
应参考
data main
中的
require.config

<script data-main="PATH_TO_CONFIG_FILE" src="../../scripts/require.js"></script>
3.由于您的模块具有依赖项,请按如下方式列出它们:

    require.config({
    baseUrl: '../../scripts',
    paths: {
        app: '../../app/utilization-management',
        appIncidentTracking: '../../app/incident-tracking',
        jquery: 'jquery-3.1.1.min',
        jqueryui: 'jquery-ui-1.12.1.min',
        jqueryplugin: '../../js/jquery.plugin.min',
        timeentry:'../../js/jquery.timeentry.min',
        handlebars: 'handlebars.amd.min',
        text: 'text',
        moment: 'moment.min',
        datatable: 'DataTables/jquery.dataTables.min',
        blockUI: 'jquery.blockUI.min',
        shared: '../../app/shared',
        bootstrap: 'bootstrap.min',
        'bootstrap-datepicker': 'bootstrap-datepicker.min',
        'bootstrap-multiselect': '../js/bootstrap-multiselect/bootstrap-multiselect'
    },
    shim: {
        bootstrap: {
            deps: ['jquery']
        },
        'bootstrap-multiselect': {
            deps: ['bootstrap']
        },
        timeentry: {
            deps:['jquery', 'jqueryplugin']
        }
    }
});
define(["jqueryplugin","timeentry","bootstrap"],function(jqueryplugin,timeentry,bootstrap) {

    $(function () {
        $('.js-timeentry').timeentry();
    });
});

模块
jqueryplugin
需要为其加载jQuery。它不是AMD模块,因为它不调用
define
。因此,您需要在
shim
中为其添加一个附加条目:

jqueryplugin: ["jquery"]
以上简称:

jqueryplugin: {
    deps: ["jquery"]
}

这个答案是不正确的。我们按相反的顺序走吧。数字3是不必要的。OP使用的是RequireJS。2号也不是必需的。这是基本的JavaScript:对象文本中的键只有在它们不是有效标识符时才需要引用。1号也不是必需的。完全可以像OP一样使用嵌套的
require
调用加载配置。我也这样做了,结果相同,但我认为这只是为了确保在jqueryplugin启动之前加载jquery,在我的情况下,我这样做是因为我没有声明依赖关系,这就是我在我的小经历中所理解的,我在回答中所描述的肯定是你展示的配置中的一个问题。可能会发生其他事情,但我没有一个水晶球可以让我复制您的运行时。我看到的唯一另一个可能是一个因素(这只是一个猜测)的问题是,如果您同时在RequireJS和RequireJS外部加载jQuery。这是可能的,有时是偶然的。如果你这样做,那么你必须在你的问题中明确指出这一点。否则,我只能说“祝你在未来的努力中好运”。
jqueryplugin: {
    deps: ["jquery"]
}