2013-12-05 3 views
0

Я только что создал форму с двумя значениями, один - период времени, а другой - имя клиента. Теперь я хотел изменить текстовые поля, которые они создаются с помощью поля даты и выпадающего меню. Выпадающее меню создано, но для поля «период» у меня есть некоторые проблемы. That - это страница в руководстве по построению даты. Проблема в том, что поле формы принимает две даты в одной строке, это называется «период». Но поле даты, когда они сделаны, представляет собой одно поле с одним идентификатором для каждого в форме, поэтому у меня не будет поля, которое я искал, но двух разделенных полей. код ниже:объединение двух значений в форме extjs 4.1

items: [{ 
    xtype: 'datefield', 
    anchor: '100%', 
    fieldLabel: 'From', 
    name: 'from_date', 
    maxValue: new Date() // limited to the current date or prior 
}, { 
    xtype: 'datefield', 
    anchor: '100%', 
    fieldLabel: 'To', 
    name: 'to_date', 
    value: new Date() // defaults to today 
}], 

Как я могу объединить две даты в одном поле для формы для обработки? Есть ли взлом или обходной путь? Спасибо.

Обновление ok Я установил скрытое поле с идентификатором «период». Значение этого параметра должно быть комбинацией значений двух полей даты. Проблема в том, что я не знаю, как получить значение поля даты внутри другого объекта. Код следующим образом (чтобы сделать его работу, вы должны забрать строку «значение:» в «период» поле):

{ 
         xtype: 'datefield', 
         fieldLabel: 'Start date', 
         format: 'Ymd', 
         //altFormats: 'Ymd', 
         listeners: { 
          'change': function(me) { 
           alert(me.getSubmitValue()); 
          } 
         }}, 
         { 
         xtype: 'datefield', 
         fieldLabel: 'End date', 
         format: 'Ymd', 
         //altFormats: 'm/d/Y', 
         listeners: { 
          'change': function(me) { 
           alert(me.getSubmitValue()); 
          } 
         }}, 
         { 
         xtype: 'textfield', 
         hidden:true, 
         fieldLabel: 'Period', 
         id: 'period' 
         value: 
         }, 
         { 
          xtype: 'textfield', 
          name: 'client', 
          fieldLabel: 'Client', 
          id: 'client' 
         } 

Точно как я объединить эти два значения? Спасибо

ответ

1

Быстрый и легкий подход, ИМО, было бы просто создать скрытое поле, которое будет хранить значение обоих. Затем, в обработчике отправки, просто возьмите значения из обоих полей и объедините их в любое значение, которое вам нужно, и установите его в скрытом поле.

Если ваша форма представляет экземпляр модели, вы можете сделать то же самое, но просто установите значение требуемого постоянного свойства вместо того, чтобы использовать скрытое поле формы.

Ни один из них, кстати, не будет считаться взломанным - просто используя API для выполнения ваших деловых потребностей.

«Полное» решение будет состоять в создании настраиваемого поля, которое требует ввода для обоих полей даты, но имеет специальную реализацию для getValue(), которая извлекает значение из полей базовой даты и создает составное значение. Вот пример этого для редактора сетки свойств: https://fiddle.sencha.com/#fiddle/t1

Принцип будет таким же для формы.

+0

Я обновил вопрос, не могли бы вы дать мне некоторое объяснение по этой проблеме? Спасибо – softwareplay

+1

Во-первых, для поля Period вы должны использовать класс Ext.form.field.Hidden вместо текстового поля со скрытым: правда. Что касается объединения значений, в обработчике отправки просто получите значения из формы, используя getValues ​​(). getValues ​​() вернет карту пар ключ-значение для каждого поля формы. Извлеките значения из двух соответствующих полей, которые вы хотите объединить, а затем установите значение скрытого поля: form.setValues ​​({Period: theCombinedValue}); – existdissolve

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