【问题标题】:Constructor of a custom dojo widget not found未找到自定义 dojo 小部件的构造函数
【发布时间】:2013-08-28 01:03:59
【问题描述】:

我正在尝试在我的 Worklight 6.0 应用程序中使用 dojo 1.9 创建一个简单的小部件,但我遇到了很多问题,我已经为它搞砸了太久,我可能错过了一些非常简单的东西。

您可以在此处找到我的 Worklight 应用程序的结构:

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

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

var dojoConfig = { isDebug:是的, 异步:是的, 解析加载:真, mblHideAddressBar:假, 包:[{ “名称”:“游乐场”, “位置”:“js/游乐场” }] };
<div id="header" data-dojo-type="playground.HeaderWidget"></div>

自定义 Widget 代码可在此处找到: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,但这似乎没有成功。

【问题讨论】:

    标签: ibm-mobilefirst dojo dojox.mobile


    【解决方案1】:

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

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

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

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

    解决方法:去掉null参数。有关declare() 功能(和可能的参数)的更多信息,请参见API documentation

    【讨论】:

    • 在与 Dimitri M 进行短暂会话后,我们在我的小部件中发现了一些问题: - 传递给声明的参数错误,确实如上所述 - 在 de 小部件中:baseClass: "headerWidget";在错误的地方定义,它应该在 postConstruct 之外使用 Widget 的 MODULE ID 似乎不起作用。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2023-01-22
    • 2011-10-09
    • 2021-02-27
    • 2014-09-03
    • 1970-01-01
    • 2011-12-05
    • 1970-01-01
    相关资源
    最近更新 更多