.js文件只有一个require(["","",...,function(){}])里面

时间:2014-04-16 10:20:44

标签: javascript node.js dojo requirejs

我的问题是关于使用“require”语句JavaScript。 我开始使用JS和Dojo,我遇到了以下问题:

我正在为网站开发插件,插件的主要Java类通过主Web应用程序API进行引用。 A .js

public String getScript() {
    return "SampleSearchChoiceListPlugin.js";
}

这个SampleSearchChoiceListPlugin.js只有一个require,带有一个路径数组和一个覆盖其体内两个函数的函数。 (未列出函数的代码,因为我认为这是无关紧要的)。它具有以下内容:

require(["dojo/_base/declare",
         "dojo/_base/lang",
         "ecm/widget/SinglePropertyEditorFactory",
         "sampleSearchChoiceListPluginDojo/SearchChoicePane"
         ],function(declare, lang, SinglePropertyEditorFactory, SearchChoicePane) {     
    /* Use this function to add any global JavaScript methods your plug-in requires.*/
    SinglePropertyEditorFactory.prototype.createSinglePropertyEditor = function(kwArgs) {
         },
    SinglePropertyEditorFactory.prototype._createSearchChoiceListEditor = function(baseConstraints, kwArgs) {

    };
});

SampleSearchChoiceListPlugin.js正在目标Web应用程序中加载,因为Firebug正在识别脚本。我在ProImageLayoutPlugin.js上设置了一些断点我检查了这个JavaScript没有被任何应该触发它的动作运行或触发。

我是JS的新手,如果有人能向我解释这些“需要”脚本是如何工作的,或者引导我找到解释这个问题的链接,那会很棒吗?我读到这可能与requirejs有关但不确定...... 感谢

2 个答案:

答案 0 :(得分:0)

require不是常规JavaScript的一部分,而是AMD模块的一部分。

根据特定的语法,我猜测您正在查看RequireJS

答案 1 :(得分:0)

在Dojo中,require是AMD加载程序。您可以将其视为导入模块的一种方式,类似于Java和Python中的import语句(等)。

  • 第一个参数是一个字符串数组,它是要加载的模块的路径。
  • 第二个参数是函数回调,它命名您在模块数组中指定的每个模块。通常,如果第一个数组具有n个元素,则此函数应采用n个参数。

在函数回调中,您可以使用这些模块。请记住,它们是作用域的,因此在此功能之外,这些模块无法访问。

以下是从require语句运行的代码示例,该语句创建一个警告“Hello,world!”的按钮。点击它时:

require([
    'dijit/form/Button', 
    'dojo/on', 
    'dojo/dom', 
    'dojo/dom-construct'
], function(Button, on, dom, domConstruct) {
    var btn = new Button({ label: 'Hello!' });
    on(btn, 'click', function(e) {
        alert('Hello, world!');
    });
    domConstruct.place(dom.byId('someNodeID'), btn.domNode);
});

如果您希望自己的插件运行,则需要将其转换为模块。幸运的是,使用define非常简单,类似于require,除了它用于创建模块(想想,“类”)而不仅仅是为了定义一个必要的组件代码块。以下是 DojoToolkit reference guide

中的示例
define([
    "dojo/_base/declare",
    "dojo/dom",
    "app/dateFormatter"
], function(declare, dom, dateFormatter) {
    return declare(null, {
        showDate: function(id, date){
            dom.byId(id).innerHTML = dateFormatter.format(date);
        }
    });
});

这定义了一个具有公共showDate功能的模块。您可以类似地构建插件,并在加载它的模块中调用它。