Как определить глобальный шаблон даты для DateTextbox в dojo 1.6

Мы используем dojo DateTextbox в наших приложениях. Раньше он отображал локальный формат мм/дд/гггг

Теперь конечному пользователю нужно то же самое в формате dd-MMM-yyyy. Ниже код позаботится об одном текстовом поле.

<input id="startDate" name="startDate" size="10" value="${fromdate }"
 dojoType="dijit.form.DateTextBox" required="true"  
 constraints="{min:'08/22/2008',datePattern : 'dd-MMM-yyyy'}"   />

Но у нас в проекте много DateTextBox. Добавление атрибута ограничений во все текстовые поля было бы утомительной работой.

Можем ли мы определить его глобально, чтобы он позаботился обо всех текстовых полях?

Благодарность


person codpursue    schedule 17.07.2013    source источник


Ответы (2)


Правильный способ сделать это — расширить DateTextBox и определить свои ограничения. Например:

declare("CustomDateTextBox", [DateTextBox], {
    postCreate: function() {
        this.inherited(arguments);
        this.set('constraints', {
            min: '08/22/2008',
            max: new Date(),
            datePattern: 'dd-MMM-yyyy'
        });
    }
});

Это, конечно, означает, что вам нужно использовать CustomDateTextBox вместо DateTextBox. Если вы действительно хотите использовать dijit/form/DateTextBox, вы можете определить имя dijit/form/DateTextBox, но я не рекомендую это делать, потому что, если вам когда-нибудь понадобится также DateTextBox по умолчанию, вы не сможете.

this.inherited(arguments) также очень важен, так как он будет выполнять супер-вызов, это означает, что также будет вызываться postCreate по умолчанию (без него ваш виджет не будет работать).

Я также сделал полный пример на JSFiddle, если вы хотите использовать dijit/form/DateTextBox, вы можете использовать этот пример.


EDIT: я только что заметил, что вы используете Dojo 1.6. Код не будет работать, но идея та же, просто расширьте свой виджет, и он заработает.

РЕДАКТИРОВАНИЕ 2: Этот код может работать с Dojo 1.6.

person g00glen00b    schedule 17.07.2013

Пара альтернатив есть

  • расширить класс dijit и добавить набор ограничений по умолчанию.
  • создать объект для ограничений

Пример:

var myConstraints = {
   min: new Date( 1950, 2, 10),
   max: new Date(),
   datePattern : 'dd-MMM-yyyy'
   };

Затем, когда вы объявляете коробку:

constraints: myConstraints
person vogomatix    schedule 17.07.2013
comment
Спасибо. В этом случае я тоже должен установить атрибуты ограничений во всех элементах DateTextBox. Я хочу избежать этого. Хотите объявить это глобально, чтобы все DateTextBox наследовали это. - person codpursue; 17.07.2013