找不到自定义dojo小部件的构造函数

时间:2013-08-25 12:20:43

标签: ibm-mobilefirst dojo dojox.mobile

我正在尝试在我的Worklight 6.0应用程序中创建一个带有dojo 1.9的简单Widget,但是我遇到了这样的问题,我一直在搞乱它太长时间我可能会遗漏一些非常简单的问题。

在这里,您可以找到我的Worklight应用程序的结构: Worklight application

我创建了包含我的javascript文件(小部件等)的子文件夹。

这是我的主要HTML文件:http://jsfiddle.net/d8K69/ 最重要的是:

 var dojoConfig = {
    isDebug : true,
    async : true,
    parseOnLoad : true,
    mblHideAddressBar: false,
    packages : [  {
                "name" : "playground",
                "location" : "js/playground"
                } ]
    };  
<div id="header" data-dojo-type="playground.HeaderWidget"></div>

可以在此处找到自定义窗口小部件代码:http://jsfiddle.net/T9Tfq/2/

define([ "dojo/_base/declare", 
     "dijit/_WidgetBase", 
     "dijit/_TemplatedMixin", 
     "dojo/text!js/playground/widgets/header/HeaderWidget.html" ], 
 function(declare, _WidgetBase, _TemplatedMixin, template) {
    WL.Logger.debug("HeaderWidget.js: init.");

    return declare("playground.HeaderWidget", null, [_WidgetBase, _TemplatedMixin], {
        headerTitle: "Default header title",

        templateString: template,

        postCreate: function() {
                // Get a DOM node reference for the root of our widget
                //var domNode = this.domNode;    

                baseClass: "headerWidget";

                  // Run any parent postCreate processes - can be done at any point
                this.inherited(arguments);

                this.headerTitle.style.color = "red";
                }
     });
});

我对定义中的模块名称,dojoConfig中的包以及其他javascript文件中的包含(require)完全一起玩时有点困惑。 目前我收到此错误:

dojo/parser::parse() error
Error: Unable to resolve constructor for: 'playground.HeaderWidget'

在另一个javascript文件中尝试此操作时:

require([ "js/playground/widgets/header/HeaderWidget"], function(HeaderWidget) {
    WL.Logger.debug("DOING SOMETHING WITH MY WIDGET");

似乎工作(虽然我还没有以程序方式创建一个headerwidget,但这似乎没有成功。

1 个答案:

答案 0 :(得分:1)

declare()函数只允许3个参数afaik:

  • 类名,在本例中为playground.HeaderWidget
  • 超类模块(_WidgetBase_TemplatedMixin
  • 对象/类本身

所以你有一个参数(null一个)太多了。

在您的情况下,它将使用null作为超类和超类模块数组[_WidgetBase, _TemplatedMixin]作为您的类/对象。数组没有constructornull也没有构造函数,因此会抛出错误。

解决方案:删除null参数。有关declare()功能(以及可能的参数)的更多信息,请参阅API documentation