用ExtJs的xmlReader读取一个xml文件,现在是文件能取到,但是文件的内容没有读进store里面,以下是写的代码以及一些调试的信息,还请论坛大虾赐教啊~~~主要的java script文件
//动态调用另外一个JS文件中的Model
Ext.Loader.setConfig({
enabled : true,
paths : {
       common:'JS/common'
        }
});
//小弟试过,如果在动态调用其它JS中的Model时,如果不先实例化,会报错
//若各位大虾认为不对,还请大虾们给个解决方法呀~~~
var a = Ext.create('common.teacher',{});
var b = Ext.create('common.student',{});
//按照ExtJs官方文档写的一个
var store = Ext.create('Ext.data.Store', {
model: 'common.teacher',
autoLoad: true,
proxy: {
        type: 'ajax',
        url : 'teacher.xml',
        reader: {
            type: 'xml',
            root: 'teacherList',
            record: 'teacher',
            implicitIncludes:true
        }
}
});
//读入XML文件
store.load();
//遍历store并且查看store中的数据
store.each(function(temp){
//运用hasMany中的函数取得子store
var pp = temp.students();
//输出子store,这里是为了方便在firebug里面查看东西,加的一步
alert(pp);
});
动态调用的java script文件:
Ext.define('common.teacher',{

extend:'Ext.data.Model',
fields:['name'],

hasMany:{model:'common.student', name:'students'}
});

Ext.define('common.student',{

extend:'Ext.data.Model',
fields:['name'],

belongsTo:{type:'belongsTo', model:'common.teacher'}
});
这是一个XML的源文件:
<?xml version="1.0" encoding="UTF-8"?>
<teacherList>
<teacher>
<name>teacher1</name>
<students>
<name>student1_1</name>
</students>
</teacher>
</teacherList>以下是用firebug进行调试时的一些截图:
已经读取xml文件,并且已经读取到teacher但是student并没有读取到:这个是一个http响应:
哎,这个东西弄得偶头疼,还请大虾们指点指点,才刚学ExtJs不久,现在跟着uspcat论坛的视频在走……

解决方案 »

  1.   

    Ext.define('common.teacher',{
         extend:'Ext.data.Model',
         fields:['name'],
         proxy: {
            type: 'ajax',
            url:'Test.TestApplication.TestOneToMany.cls',
            reader: {
                type: 'xml',
                //root: 'teacherList'
                record:'teacher'
            }
         },
         hasMany:{model:'common.student', name:'students'}
     }); 
     Ext.define('common.student',{     
       extend:'Ext.data.Model',
       proxy: {
            type: 'ajax',
            url:'Test.TestApplication.TestOneToMany.cls',
            reader: {
                type: 'xml',
                root: 'students',
                record:'name'
            }
           },    
       fields:[{name:'name',mapping:'/'}],
       belongsTo:'common.teacher'
     });
     
    var tstore = Ext.create('Ext.data.Store', {
        storeId:'simpsonsStore',
        model:'common.teacher'
    });
    tstore.load({
    callback:function(records){
    console.log(records);
    alert(records.length);
    alert(records[0].students().count());
    }
    });需要给两个model都添加代理
      

  2.   

    感谢仁兄的回复哈,让我长了知识,但是还是没有解决问题:
    我把xml数据给加了一条:
    <?xml version="1.0" encoding="UTF-8"?>
    <teacherList>
    <teacher>
    <name>teacher1</name>
    <students>
    <name>student1_1</name>
    </students>
    <students>
    <name>student1_2</name>
    </students>
    </teacher>
    </teacherList>
    程序最后算出students只有一个,这个…………还有一个问题是:我只想在A.JS中定义model,而不设定具体的数据来源,在B.JS中来调用A.JS的Model。我认为这样的话,可以实现Model的共用性,以后如果做项目之类的,我只需要去更改A.JS中的Model就可以了。
      

  3.   

    这个可以修改student中的record设置成students, Ext.define('common.student',{     
        extend:'Ext.data.Model',
        proxy: {
             type: 'ajax',
             url:'Test.TestApplication.TestOneToMany.cls',
             reader: {
                 type: 'xml',
                  root:'teacher',
                  record:'students'
             }
            },    
        fields:[{name:'name',mapping:'students>name'}],
        belongsTo:'common.teacher'
      });你可以在调用的时候设置model的proxy  setProxy(params)
      

  4.   


    按照楼上的解释,还是不行,看还有么其它的方法,先把分给你吧,只有一人回,其它人都不甩我~~
    (function(){
    Ext.onReady(function(){

    Ext.define('common.teacher',{
        extend:'Ext.data.Model',
        fields:['name'],
        proxy: {
            type: 'ajax',
            url:'teacher.xml',
            reader: {
                type: 'xml',
                record:'teacher'
            }
         },
         hasMany:{model:'common.student', name:'students'}
    }); 
     Ext.define('common.student',{     
        extend:'Ext.data.Model',
        proxy: {
             type: 'ajax',
             url:'teacher.xml',
             reader: {
                  type: 'xml',
                  root:'teacher',
                  record:'students'
             }
            },    
        fields:[{name:'name',mapping:'students>name'}],
        belongsTo:'common.teacher'
    });
     
    var tstore = Ext.create('Ext.data.Store', {
        storeId:'simpsonsStore',
        model:'common.teacher'
    });

    tstore.load({
    callback:function(records){
    console.log(records);
    alert(records.length);
    alert(records[0].students().count());
    }
    });
    })
    })();
      

  5.   

    <teacherList>
    <teacher>
    <name>teacher1</name>
    <students>
    <name>student1_1</name>
    <name>student1_2</name>
    </students>
    </teacher>
    <teacher>
    <name>teacher2</name>
    <students>
    <name>student2_1</name>
    <name>student2_2</name>
    </students>
    <students>
    <name>student2_1</name>
    <name>student2_2</name>
    </students>
    </teacher>
    </teacherList>你可以用这样的xml,然后用之前的model去匹配一般情况下包含list会有一个标签标签下是重复的list数据
      

  6.   


    貌似还是不行,弱弱的问一句,一般在做项目的时候,对于后台传过来的XML数据,你们是直接解析,还是建Model,将XML数据读进Model.再进行下一步?
      

  7.   

    将数据读到store里面,你可以去看看 store,model,proxy之间的关系