ExtJS:重装后的Combobox没有设置值

时间:2010-09-23 19:16:44

标签: combobox extjs reload store

我想我有一个非常受欢迎的问题,但现在还没找到答案。 :) 我有2个类似的组合框 - 首先我通过id设置我的值 - comboT.setValue("22763");并正确设置与此id链接的文本值。 在第二个组合框我首先重新加载商店(jsonstore),然后设置值 - comboC.setValue("3");但是这个组合设置只有ID而不是文本值(如果我打开列表,我可以看到什么组合正确标记文本值。以及之后(如果列表)只需关闭而不选择)在组合中正确显示的文本值。 如何解决这个问题呢? 感谢。

4 个答案:

答案 0 :(得分:11)

像这样的东西,语法可能稍微偏离,因为我是从内存中做到的:

var val = 3;
var store = comboC.getStore();
store.on("load", function() {
   comboC.setValue(val);
}):
store.load();

答案 1 :(得分:6)

加载存储是异步的,您可能希望将新值设置为callback:的{​​{1}}事件处理程序,否则,您需要在实际加载存储之前设置该值。

编辑:为了完整性,一个例子,所以你有一个替代版本(在某些情况下,将回调绑定到商店本身可能是不可取的,就像ormuriauga那样):

store.load({...})

答案 2 :(得分:2)

关于如何通过搜索基础数据存储中的字符串来设置组合框值的另一个示例。我能够通过使用这些答案中的样本作为基线来编码:

//The store's data definition must have at least a data.id field defined    
set_combobox_value_from_store = function (combobox, valueField, value) {
//Get a reference to the combobox's underlying store
var store = combobox.getStore();
store.load({
    callback: function () {
        //Find item index in store
        var index = store.find(valueField, value, false);
        if (index < 0) return;
        //Get model data id
        var dataId = store.getAt(index).data.Id;
        //Set combobox value and fire OnSelect event
        combobox.setValueAndFireSelect(dataId);
    }
});

答案 3 :(得分:1)

在extjs 4.1中,当模型中valueField的类型为“string”时,combo.setValue()就会起作用。这是我的代码

Ext.define('Model.CboObras', {
               extend: 'Ext.data.Model',
                idProperty: 'co_obra',
                fields: [{
                    name: 'co_obra',
                    type: 'int'
                }, {
                    name: 'nb_obra',
                    type: 'string'
                }]
            });

这不起作用。

当我将代码更改为:

   Ext.define('Model.CboObras', {
      extend: 'Ext.data.Model',
      idProperty: 'co_obra',
      fields: [{
         name: 'co_obra',
             type: 'string'
          }, {
             name: 'nb_obra',
            type: 'string'
         }]
   });

之后我用这个:

    var store = comboC.getStore();
    store.load({
   callback: function() {
      comboC.setValue(val);
   }
});

它现在就像一个魅力!