2017-02-23 104 views
1

Разработка пользовательского виджета, расширяющего dijit/form/DateTextBox, и получить следующую ошибку: Ошибка: не удалось разрешить конструктор для: 'GilCnPluginDojo.util.CustomDateTextBox' Кто-нибудь имеет подсказка о том, что происходит? Не вижу ничего плохого. Это мой код:Ошибка в пользовательском виджетах dojo 1.9, расширяющих dijit/form/DateTextBox

require(["dojo/ready", 
     "dojo/parser", 
     "dijit/form/DateTextBox", 
     "dojo/_base/declare", 
     "dijit/registry"], 
     function(ready, parser, DateTextBox, declare, registry) { 
     declare("GilCnPluginDojo.util.CustomDateTextBox", [DateTextBox], { 
     postCreate: function() { 
      this.inherited(arguments); 
      this.set('constraints', { 
       min: '01/01/1950', 
       max: new Date(), 
       datePattern: 'MM/dd/yyyy' 
      }); 
     } 
    }); 
}; 
+0

'return' отсутствует, прежде чем' declare'. Это должно быть 'return declare (« GilCnPluginDojo.util.CustomDateTextBox »...». – Himanshu

+0

Вы пишете этот код в файле подписи, например 'CustomDateTextBox.js' –

+0

Спасибо Himanshu и bRIMO за вас. Но решение, предоставленное barbsan помог мне разобраться в этом вопросе. –

ответ

0

Чтобы создать новые объекты, вам необходимо присвоить свой объявленный тип переменной. См. Следующий фрагмент. (Я удалил unnecesary модули и он пропускает некоторые CSS файл для выпадающего списка, но это не важно.)

require(["dijit/form/DateTextBox", 
 
     "dojo/_base/declare"], 
 
     function(DateTextBox, declare) { 
 
    var CustomDateTextBox = declare("GilCnPluginDojo.util.CustomDateTextBox", [DateTextBox], { 
 
     postCreate: function() { 
 
      this.inherited(arguments); 
 
      this.set('constraints', { 
 
       min: '01/01/1950', 
 
       max: new Date(), 
 
       datePattern: 'MM/dd/yyyy' 
 
      }); 
 
     } 
 
    }); 
 
    
 
    new CustomDateTextBox().placeAt('result'); 
 
});
<script src="https://ajax.googleapis.com/ajax/libs/dojo/1.9.7/dojo/dojo.js"></script> 
 
<link href="https://ajax.googleapis.com/ajax/libs/dojo/1.9.7/dijit/themes/claro/claro.css" rel="stylesheet"/> 
 
<div id='result' class='claro'></div>

Чтобы использовать пользовательские модули в других модулях вам следует использовать define вместо require и верните объявленный класс.

//CustomDateTextBox.js 
define(["dijit/form/DateTextBox", "dojo/_base/declare"], 
function(DateTextBox, declare) { 
    return declare("GilCnPluginDojo.util.CustomDateTextBox", [DateTextBox], { 
    //some code 
    }); 
}); 

//MainModule.js 
require(["your/path/to/CustomDateTextBox"], 
function(CustomDateTextBox) { 
    var cdtb = new CustomDateTextBox(); 
}); 
+0

Спасибо @barbsan! –