Ext.form.ComboBox: использовать шаблон для displayField - PullRequest
2 голосов
/ 30 июля 2010

Есть ли способ применить шаблон к выбранному значению ComboBox?Я использую шаблон для отображения выпадающих значений ComboBox, но как только я выбираю один, отображается обычное значение из хранилища данных.

{
  id:               'requestStatusCombo',
  hiddenName:       'requestStatus',
  tpl:             '<tpl for="."><div class="x-combo-list-item">{statusCode:requestStatus}</div></tpl>',
  fieldLabel:       'Status',
  xtype:             'combo',
  mode:           'local',
  triggerAction:     'all',
  store:             new Ext.data.ArrayStore({
      fields:       ['statusCode'],
      data:       [['unassigned'],['assigned'],['closed']]
  }),
  valueField:       'statusCode',
  displayField: 'statusCode'
}

Я хочу использовать свою функцию форматирования requestStatus, чтобы перевести statusCodes в специальные названия статуса локали, и это хорошо работает для выпадающего списка, но как только я что-то выберу, отображается statusCode.

Так что возможноназначить шаблон для displayField, или, возможно, сделать несколько простых пакетных изменений в хранилище данных?Может быть, обрабатывая ввод через ридер?Есть ли другое ключевое слово <tpl for="?">, которое сделает это возможным?

Я ищу какой-нибудь простой метод, использующий библиотеку Ext.Если единственным решением является предварительная обработка данных, я могу сделать это сам.

Ответы [ 2 ]

3 голосов
/ 30 июля 2010

Я нашел решение!

Я изменил свое хранилище данных и добавил считыватель для предварительной обработки статуса с помощью функции преобразования:

{
  id:               'requestStatusCombo',
  hiddenName:       'requestStatus',
  fieldLabel:       'Status',
  xtype:             'combo',
  mode:           'local',
  triggerAction:     'all',
  store:             new Ext.data.Store({
      data:       [['unassigned'],['assigned'],['closed']],
      reader:       new Ext.data.ArrayReader({},[
          {name: 'statusCode',   mapping: 0},
          {name: 'displayname', mapping: 0, convert: function(statusCode) {
              return Ext.util.Format.requestStatus(statusCode);
          }}
      ])
  }),
  valueField:       'statusCode',
  displayField:   'displayname'
}
2 голосов
/ 30 июля 2010

Изучив сгенерированный DOM, вы заметите, что, хотя элементы списка являются DIV, само поле является html элементом INPUT.Вы не можете иметь HTML внутри элемента INPUT ... так что нет ... здесь нет xtemplate.

Это не означает, что это не может быть сделано путем расширения Ext.form.ComboBox (или, возможно, Ext.Component).)

...