我正在尝试在我的Worklight 6.0应用程序中创建一个带有dojo 1.9的简单Widget,但是我遇到了这样的问题,我一直在搞乱它太长时间我可能会遗漏一些非常简单的问题。
在这里,您可以找到我的Worklight应用程序的结构:
我创建了包含我的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,但这似乎没有成功。
答案 0 :(得分:1)
declare()
函数只允许3个参数afaik:
playground.HeaderWidget
_WidgetBase
和_TemplatedMixin
)所以你有一个参数(null
一个)太多了。
在您的情况下,它将使用null
作为超类和超类模块数组[_WidgetBase, _TemplatedMixin]
作为您的类/对象。数组没有constructor
,null
也没有构造函数,因此会抛出错误。
解决方案:删除null
参数。有关declare()
功能(以及可能的参数)的更多信息,请参阅API documentation。