0
"content":{"ups_ground":
                {"amount":"7.06",
                 "currency_code":"USD",
                 "data":[],
                 "tnt":"Monday, 7\/15 at 11:00pm"},

          "ups_next_day_air_saver":
                 {"amount":"26.44",
                  "currency_code":"USD",
                  "data":[],
                  "tnt":"Monday, 7\/15 at 3:00pm"},

          "ups_next_day_early_a.m.":
                {"amount":"63.84",
                 "currency_code":"USD",
                 "data":[],
                 "tnt":"Monday, 7\/15 at 8:30am"},

           "ups_next_day_air":
                     {"amount":"30.99",
                      "currency_code":"USD",
                      "data":[],"tnt":
                      "Monday, 7\/15 at 10:30am"}
    }
}

上記のようにjsonをネストしましたが、ストアルートプロパティとモデルフィールドの書き方について本当に混乱していました..誰か助けてください.

rootProperty: content を与えてみましたが、機能していません

{ups_ground.mount} としてビュー内のデータを呼び出したいのですが、これは機能しますか??

4

1 に答える 1

0

このように、サーバー構造を標準の extjs json ストア形式に変更できますか? もしそうなら、あなたの店のセットアップは本当に簡単です:

{
    "content":[
        {
            "shipping_type":"ups_ground",
            "amount":"7.06",
            "currency_code":"USD",
            "data":[],
            "tnt":"Monday, 7\/15 at 11:00pm"
        },
        {
            "shipping_type":"ups_next_day_air_saver",
            "amount":"26.44",
            "currency_code":"USD",
            "data":[],
            "tnt":"Monday, 7\/15 at 3:00pm"
        },
        {
            "shipping_type":"ups_next_day_early_a.m.",
            "amount":"63.84",
            "currency_code":"USD",
            "data":[],
            "tnt":"Monday, 7\/15 at 8:30am"
        },
        {
            "shipping_type":"ups_next_day_air",
            "amount":"30.99",
            "currency_code":"USD",
            "data":[],"tnt":
            "Monday, 7\/15 at 10:30am"
        }
    ]
}

そして、次のようにモデルとストアを宣言できます。

Ext.define("ShippingModel", {
    extend: "Ext.data.Model",
    fields: [
        {name:"shipping_type", type:"string"},
        {name:"amount",        type:"float"},
        {name:"currency_code", type:"string"},
        {name:"data",          type:"string"},
        {name:"tnt",           type:"string"}//this may need to be a date, lookup date format for this yourself
    ]
});

Ext.create('Ext.data.Store', {
    model: 'ShippingModel',
    controller: 'news',
    proxy: {
        type: 'ajax',
        url: 'your url',
        reader: {
            type: 'json',
            root: 'content'
        },
        extraParams:{
            action:'getShippingRates'//you may not need the extraParams, just putting here for example
        }
    },
    autoLoad: true
});

そのような標準を実行できない場合は、リーダー クラスを拡張してカスタム データ構造を読み取ることができます。次のようになります。

Ext.define("MyWeirdlyStucturedDataReader", {
    extend: "Ext.data.reader.Json",

    extractData: function(root){

        var newStructure = [];

        for(var shippingType in root)
        {
            var newRecord = root[shippingType];
            newRecord.shipping_type = shippingType;
            newStructure.push(newRecord);
        }

        return this.callParent(newStructure);

    }

});

次に、プロキシのリーダー タイプ プロパティを「MyWeirdlyStucturedDataReader」に設定します。

*このコードはすべてテストされていないため、機能しない場合でも、何をすべきかがわかります。

于 2013-07-12T18:08:15.487 に答える