0

下面的代码适用于 ReadOrder.json(下)中的数据,但是当它嵌套在另一个对象中时如何读取关联的对象,如 ReadOrderNested.json(下,在“集合”内)。

更具体地说,我们可以使用映射属性或代理的读取器配置与 rootProperty (尝试这种方法没有运气)

煎茶小提琴:https ://fiddle.sencha.com/#fiddle/9fb

Extjs 版本:5.0.0

    //Base Model
Ext.define('MyApp.model.Base', {
    extend: 'Ext.data.Model',


    fields: [{
        name: 'id',
        type: 'int'
    }],


    schema: {
        namespace: 'MyApp.model'
    }
});




//Order Model
Ext.define('MyApp.model.Order', {
    extend: 'MyApp.model.Base',


    fields: [{
        name: 'customer',
        type: 'string'
    }, {
        name: 'paymentStatus',
        type: 'string'
    }]
});




//PaymentDetail Model
Ext.define('MyApp.model.PaymentDetail', {
    extend: 'MyApp.model.Base',
    fields: [{
        name: 'orderId',
        reference: 'Order'
    }, {
        name: 'cardNumber',
        type: 'string'
    }, {
        name: 'status',
        type: 'string'
    }]
});




Ext.define('MyApp.store.OrderStore', {
    extend: 'Ext.data.Store',
    model: 'MyApp.model.Order',
    proxy: {
        type: "rest",
        url: 'Order.json',
        appendId: false,
        api: {
            create: undefined,
            read: 'ReadOrder.json',
            update: 'UpdateOrder.json',
            destroy: undefined
        },
        reader: {
            type: 'json',
            rootProperty: 'order'
        },
        writer: {
            writeAllFields: true,
            allDataOptions: {
                persist: true,
                associated: true
            }
        }
    },
});








Ext.application({
    name: 'MyApp',


    launch: function() {


        var orderStore = Ext.create('MyApp.store.OrderStore');
        orderStore.load({
            callback: function(records) {
                var order = this.first();
                debugger;
                var paymentDetailList = order.paymentDetails();


                paymentDetailList.each(function(paymentDetail) {
                    //Print initial values of payment detail
                    console.log(paymentDetail.get('cardNumber'));
                    console.log(paymentDetail.get('status'));


                })


            }
        });


    }
});

数据:ReadOrder.json

{    "success": true,
    "order": [{
        "id": 1,
        "customer": "Philip J. Fry",
        "paymentStatus": "AWAIT_AUTH",
        "paymentDetails": [{
                orderId : 1,
                "cardNumber": "4111111111",
                "status": 'CREATED'
            }, {
                orderId : 1,
                "cardNumber": "4222222222",
                "status": "CREATED"
            }]
    }]
}

当关联对象嵌套在“集合”中时如何读取此数据,ReadOrderNested.json:

{    "success": true,
    "order": [{
        "id": 1,
        "customer": "Philip J. Fry",
        "paymentStatus": "AWAIT_AUTH",
        "paymentDetails": {
            "collection" : [{
                orderId : 1,
                "cardNumber": "4111111111",
                "status": 'CREATED'
            }, {
                orderId : 1,
                "cardNumber": "4222222222",
                "status": "CREATED"
            }]}


    }]
}
4

1 回答 1

0

我正在使用 ExtJS 4,不知道是否有区别。我正在使用具有以下字段的模型:

fields: [{
    name: 'id',
    type: 'int'
},{
    name: 'paymentDetails'
}],

以及将一个模型加载到表单中时

form.load(record);
Ext.getStore("paymentDetailsStore").removeAll();
Ext.getStore("paymentDetailsStore").loadRawData(record.get("paymentDetails"));

绑定到与paymentDetailsStore表单位于同一窗口中的网格。

于 2014-08-27T19:12:38.557 回答