2013-08-25 47 views
0

我正在尝试在我的Worklight 6.0应用程序中使用dojo 1.9创建一个简单的小部件,但是我遇到了这样的问题,我一直在为它乱搞太久我可能错过了一些非常简单的事情。未找到自定义dojo小部件的构造函数

在这里,你可以找到我的工作灯的应用程序的结构: 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文件中的(需要)如何精确地一起播放。 目前我得到这个错误:

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 programmaticly然而,这似乎并不成功

回答

1

declare()功能只允许3个参数据我所知:

  • 类名,在这种情况下playground.HeaderWidget
  • 超类模块(_WidgetBase_TemplatedMixin
  • 对象/类本身

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

在你的情况下,它将使用null作为超类,并使用超类模块[_WidgetBase, _TemplatedMixin]的数组作为你的类/对象。该阵列没有constructornull也没有构造函数,所以它会引发错误。

解决方法:删除null参数。有关declare()功能(和可能的参数)的更多信息可在API documentation中找到。

+0

与迪米特里·米的短会后,我们发现在我的窗口小部件的一些问题: - 传递给申报确实上面 提到错误的参数 - 在德部件:基类:“headerWidget”;被定义在错误的地方,它应该在postConstruct之外 使用模块标识的Widget似乎没有工作。 –