2013-08-25 4 views
0

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

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

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 параметра: AFAIK.

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

Так у вас есть 1 параметр (null один) объект/класс, который слишком много.

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

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

+0

После короткой сессии с Dimitri M мы обнаружили некоторые проблемы в моем виджете: - Неверный параметр, переданный, чтобы объявить действительно, как указано выше - В виджетах: baseClass: "headerWidget"; определяется не в том месте, это должно быть вне postConstruct Использование идентификатора MODULE для виджета, похоже, не работает. –

Смежные вопросы