我的问题是关于使用“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有关但不确定...... 感谢
答案 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
功能的模块。您可以类似地构建插件,并在加载它的模块中调用它。