【问题标题】:Extjs 4 Combo box not loading for first time (after combo is set with form data)Extjs 4 组合框第一次未加载(在使用表单数据设置组合之后)
【发布时间】:2011-09-20 15:47:24
【问题描述】:

我在 window->form->combo 中有组合框,我使用 form.loadRecord(record) 将数据从网格绑定到组合。

我的问题是:

绑定数据后,我触发combo改变combo数据,第一次combo扩展小,第二次点击后自动隐藏,只有combo项加载正确。

{
    xtype: 'combobox',
    editable: false,
    id: 'USERTYPECmbo',
    queryMode: 'remote',
    displayField: 'USERTYPE',
    store: Ext.create('Ext.data.Store', {
        autoLoad: true,
        fields: ['USERTYPE'],
        proxy: {
            type: 'ajax',
            extraParams: {
                typeName: 'USERTYPE'
            },
            url: 'USERTYPE.htm',
            reader: {
                type: 'json',
                root: 'res'
            }
        },
        listeners: {
            load: function (store, options) {
                var combo = Ext.getCmp('USERTYPECmbo');
                combo.setValue(combo.getValue()); //Set the remote combo after the store loads.
            }
        }
    }),
    name: 'USERTYPE',
    fieldLabel: 'USER TYPE'
}

指出我哪里出错或需要为组件添加任何属性。

【问题讨论】:

    标签: extjs extjs4


    【解决方案1】:

    尝试添加

    queryMode: 'local' 
    

    到您的组合框属性

    【讨论】:

      【解决方案2】:

      这是因为 valueField 没有在您的配置对象中定义(而 displayField 已设置)。当 extjs 尝试加载您的组合时,他需要 value 和 display 字段才能正确显示您的组合,但在渲染时,您的 valueField 尚未设置,他正在等待发送到服务器的 ajax 请求并发送回响应。

      在您的侦听器中,您正在设置尚未呈现的组合值。因此,当您第二次单击组合时,恰好在加载远程 JSON 之后,然后设置组合字段。

      {
          xtype : 'combobox',
          editable : false,   
          id:'USERTYPECmbo',  
          queryMode: 'remote',
          displayField: 'USERTYPE', 
          valueField: 'USERTYPE',//set whatever field you like in your json                        
          store :new Ext.data.Store({
              autoLoad: true,
              fields: [ 'USERTYPE' ],
              proxy: {
                  type: 'ajax',
                  extraParams: {typeName : 'USERTYPE'},
                  url : 'USERTYPE.htm',
                  reader: {
                      type: 'json',
                      root : 'res'
                  }
              }                       
          }),
          name : 'USERTYPE',
          fieldLabel: 'USER TYPE'
      }
      

      更新: 我没有注意到的一个问题是您使用 Ext.create 创建了商店,因此,extjs 会尝试两次获取您的 JSON(只需使用 firebug 检查它),而一个请求就足够了。只需使用 new 而不是 Ext .create.我在我的本地服务器上测试了你的代码并且它工作正常。如果你仍然有同样的问题,请提供一个下载链接到你的表单 js + html + Store 以便我可以查看你的代码。你可以下载我构建的测试文件在您的代码上并从here.tested 在 FF 6、opera 10 和 IE9 上工作

      【讨论】:

      • 嗨 drfanai,感谢您的回复,我添加了 valueField 并添加了延迟任务,例如.. var task = new Ext.util.DelayedTask(function() {view.down('form').加载记录(记录);});任务.延迟(20000); ..完成表单渲染和存储加载..即使我遇到了同样的问题
      • @drfanai 如果可能,请提供示例表单绑定组合(远程)数据样本或任何相关链接。因为我不知道如何验证所有组合存储是否已加载到表单中
      • 更新了我的答案。希望对您有所帮助。查看此网址以获取有关远程商店的良好教程quizzpot.com/2009/10/combo-box-loaded-dynamically-and-remotely
      • @ drfanai .i 更新了我的帖子...4shared.com/file/ySBR_McK/form.html...run 这个更新的代码知道我的问题...请先单击加载按钮并单击组合触发器 ..第一次它会来隐藏和第二次正常加载。
      • @drfanai,我得到了答案,再次感谢您的帮助...我正在考虑如何在远程组合中重置该过滤器...sencha.com/forum/…
      猜你喜欢
      • 1970-01-01
      • 2012-03-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多