0

我有一个组合框,我正在从控制器加载它(下面的代码片段)

Ext.getCmp("combovalue2").getStore().loadRawData(value2);

value2是我从模型中获得的对象,它工作成功(我验证了组合框的这个 onclick)。下面是我的表单面板中组合框的代码片段

{
                xtype:'combo',
                id:"combovalue2",
                name: 'cpa',
                cls:'extraComboBox',
                forceSelection: true,
                queryMode: 'local',
                fieldLabel: 'Alliance',
                displayField: 'label',     
                valueField: 'numAe',
                emptyText: 'select Alliance',
                store: new Ext.data.JsonStore({fields: ["numAe","label"]})
           }

这就是我的 json 的样子

"cpaList": [
        {
            "label": "A Communications                   ",
            "id": "USF  ",
            "numOff": 999,
            "numAe": 483,
            "pctFeeCalc": 0,
            "pctFeeBasisPoint": 0
        },
        {
            "label": "Ac Neilson, Inc                    ",
            "id": "MMV  ",
            "numOff": 999,
            "numAe": 876,
            "pctFeeCalc": 20,
            "pctFeeBasisPoint": 0
        },
        {
            "label": "Acer Worldwide Inc.                ",
            "id": "CAA  ",
            "numOff": 999,
            "numAe": 619,
            "pctFeeCalc": 0,
            "pctFeeBasisPoint": 0
        },
        {
            "label": "Advantech, Inc.                    ",
            "id": "SLE  ",
            "numOff": 999,
            "numAe": 592,
            "pctFeeCalc": 0,
            "pctFeeBasisPoint": 0
        },
        {
            "label": "Afo Ltd                            ",
            "id": "NAN  ",
            "numOff": 999,
            "numAe": 959,
            "pctFeeCalc": 25,
            "pctFeeBasisPoint": 0
        },
        {
            "label": "All Systems Go                     ",
            "id": "BCS  ",
            "numOff": 999,
            "numAe": 944,
            "pctFeeCalc": 25,
            "pctFeeBasisPoint": 0
        },
        {
            "label": "Alyssa Anne Lock                   ",
            "id": "GRE  ",
            "numOff": 999,
            "numAe": 369,
            "pctFeeCalc": 20,
            "pctFeeBasisPoint": 0
        }

]

模型

{name: 'cpa', mapping: 'cpaList'}

但是我很难显示在呈现组合框时应该显示的值。我想为来自 json 的组合框设置值(这意味着 value2 是一个对象数组,我要设置的是一个字符串),同时还在我正在做的组合框中显示数据数组通过loadRawData(value2).

4

3 回答 3

0

我解决了这个问题。我在模型中采用了 2 个不同的对象,第一个是通过 loadData(modelObject) 加载存储,然后另一个在组合框中保留值 - 名称 config 即 cpa。

型号定义:

{name: 'cpaList', mapping: 'cpaList'},
{name: 'cpa', mapping: 'feeSetupCtg.cpaNo'}

控制器定义:

var value2 = model.get('cpaList');
Ext.getCmp("combovalue2").getStore().loadData(value2);

组合框定义:

{
    xtype:'combo',
    id:"combovalue2",
    name: 'cpa',
    cls:'extraComboBox',
    forceSelection: true,
    queryMode: 'local',
    fieldLabel: 'Alliance',
    displayField: 'label',     
    valueField: 'numAe',
    emptyText: 'select Alliance',
    editable: false,
    store: new Ext.data.JsonStore({fields: ["numAe","label"]})
}
于 2013-06-24T17:30:09.703 回答
0

在你的控制器中添加这个:

Ext.getCmp("combovalue2").getStore().on("load", this.setDefaultComboValue, this);

...

setDefaultComboValue: function(store, records, successful, eOpts)
{
   if(successful){
        Ext.getCmp("combovalue2").setValue(records[0]); //records[0] or whatever record you want to load
   }
}

请注意,在 Extjs 4.2 中,loadRawData 方法不再触发 load 事件。我建议您使用 load 方法来加载您的 JSON 数据。

于 2013-07-17T11:36:55.750 回答
0

您不必加载RawData。从您的代码的外观来看,您的商店需要更改,或者您需要使用一部分返回的 JSON 数据。

你的根是'cpaList'。商店不知道该怎么办。如果您想保持代码原样,请执行以下操作:

Ext.getCmp("combovalue2").getStore().loadData(value2.cpaList);

否则,您将不得不更改您的商店以匹配您的数据。如果您实际上定义了此存储,然后将您的组合存储设置为定义的存储,它将改为在渲染时自动加载。然后您不必触发单独的 AJAX 请求,您的代码现在都与您的商店相关。

var store = Ext.create('Ext.data.Store', {
    autoLoad: true,
    proxy: {
        type: 'ajax',
        url: '/whateveryoururlis',
        reader: {
            type: 'json',
            root: 'cpaList' // your root of your data containing the array of fields for the store
        }
    },
    fields: ["numAe","label"]
});
于 2013-06-21T18:23:27.083 回答