Javascript Dojo1.10小部件不是构造函数

Javascript Dojo1.10小部件不是构造函数,javascript,dojo,widget,Javascript,Dojo,Widget,我想在另一个名为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,

我想在另一个名为
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');
    }
});
});
但是,在
var dashboard=new p_dashboard()行,我得到以下错误:

类型错误:p_仪表板不是构造函数 在HTMLDocument.\u 461 (dojo.js:8)“在domReady回调中”类型错误:p_仪表板不是构造函数


我似乎不明白它为什么会有这个错误。请告诉我一些想法?谢谢你

我认为你的错误在模块的加载顺序中

Core.js
中,
ui/dashboard/dashboard
小部件是在Ready插件之后加载的,在callback函数中,它直接在
主题
模块之后引用(知道dojo/domReady!未在calback BEASE中引用,因为通用约定不在回调函数中分配返回变量)

因此,尝试在
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!"
], ..... 
);

我想你的错误在模块的装载顺序上

Core.js
中,
ui/dashboard/dashboard
小部件是在Ready插件之后加载的,在callback函数中,它直接在
主题
模块之后引用(知道dojo/domReady!未在calback BEASE中引用,因为通用约定不在回调函数中分配返回变量)

因此,尝试在
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!"
], ..... 
);

使用9个元素的数组调用
require
,在函数中仅使用8个元素。最后(第8个)元素是
dojo/domReady!

require([
    "dojo/_base/config",     // 1 
    "dojo/_base/declare",    // 2
    "dojo/dom",              // 3
    "dojo/dom-class",        // 4
    "dojo/dom-style",        // 5
    "dojo/on",               // 6
    "dojo/topic",            // 7
    "dojo/domReady!",        // 8
    "ui/dashboard/dashboard" // 9
], function(
    b_config,                // 1. dojo/_base/config
    b_declare,               // 2. dojo/_base/declare
    b_dom,                   // 3. dojo/dom
    b_domClass,              // 4. dojo/dom-class
    b_domStyle,              // 5. dojo/dom-style
    b_on,                    // 6. dojo/on
    b_topic,                 // 7. dojo/topic
    /*********************************************************
                 Where is my dojo/domReady!??????
    *********************************************************/
    p_dashboard              // 8. ui/dashboard/dashboard
) {
    // ...
});
总之,您必须做的是在
require
的数组末尾移动“dojo/domReady”:

require([
    "dojo/_base/config",
    "dojo/_base/declare",
    "dojo/dom",
    "dojo/dom-class",
    "dojo/dom-style",
    "dojo/on",
    "dojo/topic",
    "ui/dashboard/dashboard",
    "dojo/domReady!"
], function(
    b_config,   // dojo/_base/config
    b_declare,  // dojo/_base/declare
    b_dom,      // dojo/dom
    b_domClass, // dojo/dom-class
    b_domStyle, // dojo/dom-style
    b_on,       // dojo/on
    b_topic,    // dojo/topic
    p_dashboard // ui/dashboard/dashboard
                // dojo/domReady! is the self-called function
) {
    // ...
});

使用9个元素的数组调用
require
,在函数中仅使用8个元素。最后(第8个)元素是
dojo/domReady!

require([
    "dojo/_base/config",     // 1 
    "dojo/_base/declare",    // 2
    "dojo/dom",              // 3
    "dojo/dom-class",        // 4
    "dojo/dom-style",        // 5
    "dojo/on",               // 6
    "dojo/topic",            // 7
    "dojo/domReady!",        // 8
    "ui/dashboard/dashboard" // 9
], function(
    b_config,                // 1. dojo/_base/config
    b_declare,               // 2. dojo/_base/declare
    b_dom,                   // 3. dojo/dom
    b_domClass,              // 4. dojo/dom-class
    b_domStyle,              // 5. dojo/dom-style
    b_on,                    // 6. dojo/on
    b_topic,                 // 7. dojo/topic
    /*********************************************************
                 Where is my dojo/domReady!??????
    *********************************************************/
    p_dashboard              // 8. ui/dashboard/dashboard
) {
    // ...
});
总之,您必须做的是在
require
的数组末尾移动“dojo/domReady”:

require([
    "dojo/_base/config",
    "dojo/_base/declare",
    "dojo/dom",
    "dojo/dom-class",
    "dojo/dom-style",
    "dojo/on",
    "dojo/topic",
    "ui/dashboard/dashboard",
    "dojo/domReady!"
], function(
    b_config,   // dojo/_base/config
    b_declare,  // dojo/_base/declare
    b_dom,      // dojo/dom
    b_domClass, // dojo/dom-class
    b_domStyle, // dojo/dom-style
    b_on,       // dojo/on
    b_topic,    // dojo/topic
    p_dashboard // ui/dashboard/dashboard
                // dojo/domReady! is the self-called function
) {
    // ...
});

这能解决你的问题吗?这能解决你的问题吗?