extjs store loadRecords的奇怪写法



extjs版本2.1


1.store的定义如下:

var store = new Ext.data.GroupingStore({
        reader: new BidResultItemXmlReader(),
        url: Ipms.StateAssetOfficeService + '/QueryBidResultItem',
        sortInfo: { field: 'id', direction: "DESC" },
        groupField: 'groupField'
    });


2. 当执行store.load()方法,跟踪firebug发现一个奇怪的事情。在Store.js中loadRecords()方法如下:

loadRecords : function(o, options, success){
    // ...
                                                                                                                 
    for(var i = 0, len = r.length; i < len; i++){
         r[i].join(this); // 奇怪的代码
    }
    if(this.snapshot){
         this.data = this.snapshot;
         delete this.snapshot;
    }
    this.data.clear();
    this.data.addAll(r);
    this.totalLength = t;
    this.applySort();
    this.fireEvent("datachanged", this);
                                                                                                                 
    //..
}

其中,r为加载的数据记录集;this为我们定义的store。


3.firebug的截图如下:

150332513.jpg

150436628.jpg

上图的E就是源码中的r,this就是源码中的this。


4.join方法的定义在Recor.js文件中,如下:

// private
join : function(store){
    this.store = store;
},

只是简单的把数据record跟store进行一个关联。


5. 奇怪的是:在执行循环语句,当r = len的时候,并没有跳出循环,也没有执行循环体的语句。

而是分别执行了MixedCollection的clear()、addAll()和GroupingStore的applySort()。


真是奇怪,没有回调、没有事件fire,这几个方法是怎么调用的呢?

看起来是执行了循环体下面的语句:

    this.data.clear();
    this.data.addAll(r);
    this.totalLength = t;
    this.applySort();
    this.fireEvent("datachanged", this);


但是firebug根本是断不到的。


先记一笔债在这里。。



你可能感兴趣的:(ExtJs,store,loadRecords)