Конструктор пользовательского виджета додзё не найден

Я пытаюсь создать простой виджет с dojo 1.9 в моем приложении Worklight 6.0, но я сталкиваюсь с такими проблемами, я слишком долго возился с этим, я, вероятно, пропустил некоторые очень простые.

Здесь вы можете найти структуру моего приложения Worklight: Приложение 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 точно совпадают. В настоящее время я получаю эту ошибку:

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");

Кажется, работает (хотя на самом деле я еще не создавал виджет заголовка программно, похоже, это не удалось.


person Driss Amri    schedule 25.08.2013    source источник


Ответы (1)


Функция declare() допускает только 3 параметра:

  • Имя класса, в данном случае playground.HeaderWidget
  • Модули суперкласса (_WidgetBase и _TemplatedMixin)
  • Сам объект/класс

Итак, у вас есть 1 параметр (null), который слишком велик.

В вашем случае он будет использовать null в качестве суперкласса и массив модулей суперкласса [_WidgetBase, _TemplatedMixin] в качестве вашего класса/объекта. Массив не имеет constructor, а null также не имеет конструктора, поэтому он выдаст ошибку.

Решение: удалить параметр null. Дополнительную информацию о функциональности declare() (и возможных параметрах) можно найти в документации по API. .

person g00glen00b    schedule 25.08.2013
comment
После короткого сеанса с Дмитрием М мы обнаружили некоторые проблемы в моем виджете: - Неверный параметр, переданный для объявления, как указано выше - В виджете: baseClass: headerWidget; определен не в том месте, он должен быть за пределами postConstruct Использование ID МОДУЛЯ для виджета, похоже, не работает. - person Driss Amri; 26.08.2013