0

ExtJS(3)を使用していて、JSONを使用してクエリされているデータベースのレコードを使用してコンボボックス/ドロップダウンにデータを入力しようとしています。

これが私のJSON呼び出しです:

var projectDropDown = new Ext.data.Store({
    autoLoad: true,
    url: 'dropdown.json',
    storeId: 'projectDropDown',
    idProperty: 'ProjectID',
    fields: [ 'ProjectID', 'ProjectName' ]
});

そして、私のコンボボックスコード:

{
    xtype: 'combo',
    id: 'ProjectName',
    fieldLabel: 'Project Name',
    valueField: 'ProjectID',
    displayField: 'ProjectName',
    store: projectDropDown,
    typeAhead: true,
    mode: 'local',
    triggerAction: 'all',
    emptyText:'Select a Project...',
    selectOnFocus:true
}

JSONは次のように私のデータを返します:

[
   {
      "ProjectID":"1",
      "ProjectName":"Mike's Test Project"
   },
   {
      "ProjectID":"2",
      "ProjectName":"My Second Test Project"
   },
   {
      "ProjectID":"3",
      "ProjectName":"My Third Project"
   },
   {
      "ProjectID":"6",
      "ProjectName":"More testing from me"
   }
]

私は近くにいると思います、私は接続を確立するために私が欠けているものが見当たらないだけです。

助けてくれてありがとう。

4

1 に答える 1

2

私が行う最初のステップは、ストア(またはストアのサイズなど)をコンソールに出力して、データがストアに適切にロードされているかどうかを確認することです。

私の推測では、ルートオブジェクトに返されるJSONを囲む必要があると思います。次のように指定された要素を使用して、ストアにJSONReaderを指定してみてください。root

var projectDropDown = new Ext.data.Store({
    autoLoad: true,
    url: 'dropdown.json',
    storeId: 'projectDropDown',
    reader: new Ext.data.JsonReader(
    {
        root: 'projects'
    }),
    idProperty: 'ProjectID',
    fields: [ 'ProjectID', 'ProjectName' ]
});

次に、返されるJSONを次のように変更します

{
    "projects" : [
       {"ProjectID":"1","ProjectName":"Mike's Test Project"},
       {"ProjectID":"2","ProjectName":"My Second Test Project"},
       ....
    ]
}
于 2012-06-25T23:02:06.457 に答える