数据:var myData = {
            total:111,
            user:{
                name:'aaa',
                age:19,
                orders:[
                    {name:'a',num:'100'},
                    {name:'ab',num:'10'}
                ]
            }
        }
User类:  Ext.define('User',{
            extend:'Ext.data.Model',
            fields:[
                {name:'name',type:'auto'},
                {name:'age',type:'int'}
            ],
            hasMany  : {model: 'Order',name:'orders'}
        });
Order类:Ext.define('Order',{
            extend:'Ext.data.Model',
            fields:[
                {name:'name',type:'auto'},
                {name:'num',type:'int'}
            ],
            belongsTo:{ model:'User',name:'user'}
        });
关联数据和代理: var mProxy = Ext.create('Ext.data.proxy.Memory',{
            model:'User',
            data:myData,
            reader:{
                type:'json',
                root:'user'
            }
        });问题在这块
读取数据并展示:mProxy.read(new Ext.data.Operation(),function(o){
            //o => Ext.data.Operation    1
            var users = o.getRecords();
            Ext.Array.each(users,function(user){
                // user => User    2
                var orders = user.raw.orders;
                Ext.Array.each(orders,function(order){
                    //order => Order
                    alert(order.num);
                })
            });
        });
运行都是没有问题的,读取展示的“1”处,o是一个Operation类,有方法getRecords()可以获取Models
users是一个User集合,也是一个Ext.data.Model集合
到了“2”处,我看了API,也没有找到怎么通过方法把orders取出来,只能用FireBug调试看结构点出来,非常不爽请问:怎么通过ExtJS的API把数据模型中一对多中一中包含的多给取出来?取出来应该是一个Model数组extjs4JavaScript

解决方案 »

  1.   


     mProxy.read(new Ext.data.Operation(),function(o){
                //o => Ext.data.Operation    1
                var users = o.getRecords();
                Ext.Array.each(users,function(user){
                    // user => User    2
                    //var orders = user.raw.orders;
                    var orders = user.orders();
                    orders.each(function(order){
                     alert(order.get('name'));
                    });
    //                Ext.Array.each(orders,function(order){
    //                    //order => Order
    //                    alert(order.num);
    //                })
                });
            });
    已经解决了,直接用name()就能拿出来,注意是在hasmany里设置的name(),不是Model名()
    拿出来是个Ext.data.Store
    直接用Store的方法遍历就行了