【问题标题】:Data is not displaying in multiselect after loading data from store in extjs从 extjs 中的商店加载数据后,数据未在多选中显示
【发布时间】:2011-09-06 06:29:22
【问题描述】:

这两天我一直在尝试,但找不到解决方案。我要做的是将数据远程加载到存储中,这是我的代码:

var ds = Ext.create('Ext.data.ArrayStore', {
        proxy: {
        type: 'ajax',
        url : './index.php/firewall/loadRules',
        },      
        fields: ['value','text'],           
        totalProperty: 'num',  
        sortInfo: {
                    field: 'value',
                    direction: 'ASC'
                  }     
    }); 

    ds.load();

在此之后将此商店分配给多选组件,代码在这里:

var form_number_list = Ext.create('Ext.form.Panel', {
        border: false,      
        bodyPadding: 5,
        id: 'form_number_list',
        width: '35%',
        height: '100%',
        flex: 3,
        items: [{
            anchor: '93%',
            xtype: 'multiselect',
            msgTarget: 'side',            
            name: 'multiselect',
            id: 'fire_select',
            allowBlank: false,
            minSelections: 1,
            maxSelections: 1,
            store: ds
        }]
    });

ajax 调用返回这个值:

[['012345', '012345'], ['012346', '012346'], ['01234567', '01234567'], ['546747', '546747'], ['54663', '54663'], ['546638', '546638'], ['46767638', '46767638'], ['63568545868', '63568545868'], ['6368688', '6368688'], ['35468488', '35468488'], ['84584845', '84584845'], ['56345738', '56345738'], ['533478', '533478'], ['583477', '583477'], ['563457548', '563457548'], ['53755438', '53755438'], ['53657648', '53657648'], ['5367764', '5367764'], ['563673673', '563673673'], ['5436638', '5436638'], ['46363773', '46363773'],]

现在在浏览器中,多选框正在加载这么多项目,但它们的值没有显示,我的意思是所有项目都是空项目。在萤火虫中,我可以看到所有项目的空“li”标签。

【问题讨论】:

  • 多选 xtype 是扩展组件?因为extjs的api没有。

标签: javascript extjs multi-select


【解决方案1】:

您错过了多选的字段映射属性。您必须添加:

displayField: 'text',
valueField: 'value'

到您的多选。另外,请记住,最好返回正确的 json 而不是数组,因为您似乎正在使用总属性。您可以按如下方式使用json:

{"rows": [{"text" : "012345","value": "012345"},{"text": "012346","value": "012346"},{"text": "01234567","value": "01234567"},{"text": "546747","value": "546747"}],"num": 4}

为此,您必须使用 JsonStore 而不是 Array。您选择 ArrayStore 有什么特别的原因吗?

【讨论】:

  • 感谢哥们的解决方案。我也从 Molecule Man's solution of different question 中找到了解决这个问题的方法。并且没有特别的理由选择 ArrayStore,我什至可以使用 JsonStore,但是这个 JsonStore 会更好用。再次感谢:)
  • 对此感到抱歉..我在复制粘贴时错过了变量名:)
【解决方案2】:

您要么必须从存储配置中删除 root: 'data',,要么修改服务器响应,使其看起来像:

{data: [['012345', '012345'], ['012346', '012346'], /* ... */ ]}

【讨论】:

猜你喜欢
  • 1970-01-01
  • 2014-09-06
  • 2011-12-02
  • 2012-02-15
  • 1970-01-01
  • 2011-09-11
  • 1970-01-01
  • 2013-08-16
  • 1970-01-01
相关资源
最近更新 更多