2

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'
}

requestStatusformat 関数を使用して、 をロケール固有のステータス名に変換したいのですがstatusCodes、これはドロップダウン リストではうまく機能しますが、何かを選択するとすぐにstatusCodeが表示されます。

では、displayField にテンプレートを割り当てたり、データストアで単純なバッチ変更を行ったりすることは可能でしょうか? おそらくリーダーを介して入力を処理することによって?<tpl for="?">これを実現する別のキーワードはありますか?

Ext ライブラリを利用した簡単な方法を探しています。唯一の解決策がデータを前処理することである場合、私はそれを自分で行うことができます。

4

2 に答える 2

4

私は解決策を見つけました!

データストアを変更し、変換関数を使用してステータスを前処理するリーダーを追加しました。

{
  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'
}
于 2010-07-30T08:22:24.870 に答える
2

生成されたDOMを調べると、リスト要素はDIVですが、フィールド自体はhtmlINPUT要素であることがわかります。INPUT要素内にHTMLを含めることはできません...したがって、ここにはxtemplateはありません。

これは、Ext.form.ComboBox(またはおそらくExt.Component)を拡張することによってそれを行うことができないという意味ではありません

于 2010-07-30T08:04:07.503 に答える