0

リスト(場所の配列)に表示する必要がある以下のjsonがあります。rootProperty:response.data.locationsを使用してlocations配列を取得できますが、成功、ロゴ、およびbackgroundpictureを取得するにはどうすればよいですか。どんな提案も役に立ちます。

Ext.data.JsonP.callback1(
{
    "response": {
        "success": true,
        "data": {
            "logo": "http:\\/\\/www.websiteurl.nl\\/Images\\/logo.jpg",
            "backgroundpicture": "http:\\/\\/www.websiteurl.nl\\/Images\\/logo.jpg",
            "locations": [
                {
                    "id": "47",
                    "name": " 's-Gravenzande (De Carlton)",
                    "street": "Naaldwijkseweg",
                    "number": "257",
                    "zipcode": "2691 PV",
                    "city": "'s Gravenzande",
                    "province": "9",
                    "phone": "0174-412997",
                    "email": "info@websiteurl.nl",
                    "kvk": "27210224",
                    "lat": "51.988593",
                    "longitude": "4.188087",
                    "slug": "-sGravenzande-De-Carlton",
                    "website": "http:\\/\\/www.websiteurl.nl",
                    "logo": null,
                    "backgroundpicture": null
                },
                {
                    "id": "1",
                    "name": "Achterberg",
                    "street": "Weteringsteeg",
                    "number": "12",
                    "zipcode": "3911 VN",
                    "city": "Achterberg",
                    "province": "7",
                    "phone": "0317-613643",
                    "email": "info@websiteurl.nl",
                    "kvk": "30093218",
                    "lat": "51.976316",
                    "longitude": "5.601611",
                    "slug": "-Achterberg",
                    "website": "http:\\/\\/www.websiteurl.nl",
                    "logo": null,
                    "backgroundpicture": null
                }


            ]
        }
    }
}
);

リストナーをストアに追加してからこれらをログに記録すると、値が取得されますが、ポイントは、これを解析してストアに保存する方法です。

Ext.define("app.store.LocationStore",{
extend:'Ext.data.Store',
id: 'locationStore',

requires: 'Ext.data.proxy.JsonP',

config:{
    autoLoad: 'true',
    model:'app.model.LocationModel',

    proxy:
    {
        type:'jsonp',
        url:'http://www.websiteurl.nl/API/',
        limitParam: false,
        pageParam: false,
        startParam: false,
        extraParams:
        {
            method:'general',
            token: '123456'

        },
        reader:{
            type:'json',
            successProperty: 'success',
            rootProperty: 'response.data.locations'
        }
    },
    listeners:{
        load : function()
        {console.log(this.getProxy().getReader().rawData.response.data.backgroundpicture);
            console.log(this.getProxy().getReader().rawData.response.data.logo);
            console.log(this.getProxy().getReader().rawData.response.success);
            console.log("location store loaded");
        }
    }
}
});
4

2 に答える 2

1

単純なJSONPリクエストを使用してデータを入力し、ストアに追加することもできます。次のようになります。

Ext.data.JsonP.request({
     url:'http://www.websiteurl.nl/API/',
     callbackKey: 'callback',
     params: {
         method:'general',
         token: '123456'
     },
     success: function(result, request) {
          //result.response.success
          //result.response.data.logo
          //result.response.data.backgroundpicture
          store.add(result.response.data.locations);
     }
});
于 2012-08-24T10:33:04.937 に答える
1

hasOneおよびhasMany関連付けを使用して、データ構造に従ってモデルを構築する必要があります。

Ext.define('myApp.model.MyModel', {
    extend: 'Ext.data.Model',
    config: {
        fields  : [
            {
                name : 'success'
            }
        ],
        hasOne : [
            {
                model          : 'myApp.model.Data,
                name           : 'data',
                associationKey : 'data'
            }
        ]
    }
});

Ext.define('myApp.model.Data, {
    extend: 'Ext.data.Model',
    config: {
        fields  : [
            {
                name : 'logo'
            },
            {
                name : 'backgroundpicture'
            }
        ],
        hasMany : [
            {
                model          : 'myApp.model.Location',
                name           : 'locations',
                associationKey : 'locations'
            }
        ]
    }
});

Ext.define('myApp.model.Location', {
    extend: 'Ext.data.Model',
    config: {
        fields  : [
            {
                name : 'id'
            },
            {
                name : 'name'
            },
            {
                name : 'street'
            }
    ...to be continued...
于 2012-08-24T04:25:54.453 に答える