我有以下自定义小部件,我想在另一个名为 Core.js
的 Javascript
文件中实例化它。
仪表板小部件
define([
"dojo/_base/declare",
"dojo/_base/config",
"dojo/ready",
"dojo/_base/window",
"dijit/_WidgetBase",
"dijit/_TemplatedMixin",
], function(
v_declare,
v_config,
v_ready,
v_window,
v_WidgetBase,
v_TemplatedMixin,
) {
return v_declare("dashboard", [v_WidgetBase, v_TemplatedMixin], {
templateString: "<div>hello world</div>",
constructor: function(setting) {
console.log("smtg..");
},
buildRendering: function() {
var v_context = this;
var v_domNode = this.domNode;
this.inherited(arguments);
console.log('Expeerimental');
},
init: function() {
console.log('Expeerimental');
}
});
});
Core.js 中仪表板小部件的实例化
require([
"dojo/_base/config",
"dojo/_base/declare",
"dojo/dom",
"dojo/dom-class",
"dojo/dom-style",
"dojo/on",
"dojo/topic",
"dojo/domReady!",
"ui/dashboard/dashboard"
], function(
b_config,
b_declare,
b_dom,
b_domClass,
b_domStyle,
b_on,
b_topic,
p_dashboard
) {
start();
function start(){
console.log(p_dashboard);
var dashboard = new p_dashboard();
};
});
但是,在 var dashboard = new p_dashboard();
行,我收到以下错误:
TypeError: p_dashboard is not a constructor at HTMLDocument._461 (dojo.js:8) "in domReady callback" "TypeError: p_dashboard is not a constructor
我似乎无法弄清楚为什么会出现此错误。请赐教我任何想法吗?谢谢
最佳答案
我认为你的错误在于模块的加载顺序,
在 Core.js
中,ui/dashboard/dashboard
小部件是在 Ready 插件之后加载的,并且在回调函数中,它是在 之后直接引用的topic
模块(知道回调中没有引用 dojo/domReady!,因为常见约定是不在回调函数中分配返回变量)
因此,尝试在 dojo/domReady!
之前创建 ui/dashboard/dashboard
,如果在 dojo config 中正确配置了路径,dojo 将正确实例化它。
它应该像下面这样:
require([
"dojo/_base/config",
"dojo/_base/declare",
"dojo/dom",
"dojo/dom-class",
"dojo/dom-style",
"dojo/on",
"dojo/topic",
"ui/dashboard/dashboard",
"dojo/domReady!"
], .....
);
关于javascript - Dojo 1.10 Widget 不是构造函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47048040/