Extjs 4如何在不加载商店的情况下设置组合框值

时间:2014-09-12 16:19:21

标签: extjs extjs4 extjs4.1 extjs4.2 extjs-mvc

我的ExtJS 4.2.1表格带有combobox

xtype: 'container',
    width: 360,
    items: [{
        xtype: 'combobox',
        fieldLabel: 'Shift Code',
        name: 'ShiftCode',
        store: Ext.create('SoftHuman.store.catalog.ShiftCode'),
        blankText: ' ',
        allowBlank: false,
        displayField: 'Description',
        valueField: 'ShiftCode'
    }]

单击触发器图标时的组合它将从商店获取数据,然后显示项目,如下图所示。

enter image description here

  

我想要做的是在加载表单时在组合中设置值和显示值,然后如果用户单击以展开组合,则商店将像现在一样远程获取项目。

这是因为我有25个组合的这个表单,我不想在显示表单之前加载它们然后分配每个组合值,因为用户不会更改所有组合值,也许他只会更改2或3,因此最初加载它们没有意义,但我想从我的记录中显示组合中的显示值。

有任何线索吗?

3 个答案:

答案 0 :(得分:3)

您可以在商店中插入默认值并将其设置为值

 combo.getStore().insert(0, { "valueField": 0, "DisplayField": "All Properties" }, true);
 combo.setValue(0);

答案 1 :(得分:1)

你缺少的是 queryMode:' remote':

来自sencha docs

在queryMode:' remote'中,ComboBox根据用户交互动态加载其商店。

这通常用于"自动完成"输入类型,用户完成输入后,将加载存储。

在加载请求中发送包含类型化字符串的参数。输入字符串的默认参数名称是query,但可以使用queryParam config配置它。

在queryMode:' remote'中,可以使用remoteFilter:true配置存储,并且可以以编程方式将其他过滤器添加到存储中,然后随每个加载请求一起传递,这允许服务器进一步细化返回的数据集。

如果您也需要,也可以使用queryDelay。 这是我从代码中提取的一个例子。

 {
                  xtype: 'combo',
                  itemId: 'totalSearchCombo',
                  width: 200,
                  emptyText: 'Total Search',
                  typeAhead: true,
                  editable: true,
                  hideLabel: true,
                  hideTrigger: true,
                  store: 'dropDownList_s',
                  mode:'remote',
                  displayField: 'display_nm',
                  anchor: '100%',
                  matchFieldWidth: false,
                  listConfig:
                      {
                          width: 195,
                          loadingText: 'Searching...',
                          emptyText: 'No matching items found, or not enough characters entered.',
                          getInnerTpl: function () {
                              var tpl = '<div>{display_nm}</div>';
                              return tpl;
                          }
                      },
                  //pageSize: 15,
                  listeners: {

                  }


              }

答案 2 :(得分:-1)

解决方案是设置以下方法:

combo.setValue('here the value');
combo.setRawValue('here the value to display');