在Ext的JsonStore的load方法中使用回調callback(轉)


Ajax的異步請求有時候會帶來一些問題,如在Ext做的頁面中,需要加載一個JsonStore數據集,在緊跟着的代碼中可能就會對數據集進行訪問的操作,由於異步請求很可能導致數據未加載完就開始訪問,結果可能會不是想要的結果。這里load方法中提供了一個callback回調函數,可以解決延遲加載的問題,我們需要處理的一部分代碼可以放在callback函數中處理,這樣就解決了異步請求帶來的問題。如:

Js代碼
1.var collectIndex_ds = new Ext.data.JsonStore({
2. url: '',
3. root: 'collectIndexs',
4. id: 'id',
5. fields:[
6. {name:'id'},
7. {name:'userViewId'},
8. {name:'timeType'},
9. {name:'measureUnitId'}
10. ]
11. });
var collectIndex_ds = new Ext.data.JsonStore({
url: '',
root: 'collectIndexs',
id: 'id',
fields:[
{name:'id'},
{name:'userViewId'},
{name:'timeType'},
{name:'measureUnitId'}
]
});
其回調函數使用為

Java代碼
1.//使用回調方法,可以解決延遲加載的問題;這里使用回調時為了把userViewId項為空的加上默認值1
2. collectIndex_ds.load({
3. callback :function(r,options,success){
4. if(success){
5. for(var i=0;i<r.length;i++){
6. var record = r[i];
7. var v = record.data.userViewId;
8. if(v==null || v==""){
9. record.set("userViewId",1);
10. }
11. }
12. }
13. }
14. });
//使用回調方法,可以解決延遲加載的問題;這里使用回調時為了把userViewId項為空的加上默認值1
collectIndex_ds.load({
callback :function(r,options,success){
if(success){
for(var i=0;i<r.length;i++){
var record = r[i];
var v = record.data.userViewId;
if(v==null || v==""){
record.set("userViewId",1);
}
}
}
}
});
Ext官網關於callback的解釋

引用
callback : Function

A function to be called after the Records have been loaded. The callback is called after the load event and is passed the following arguments:

* r : Ext.data.Record[]
* options: Options object from the load call
* success: Boolean success indicator

 

因為回調都用的是異步技術,我們還可以直接采用同步處理,掉用的代碼如下

unction syncCall(url, params) {
    var obj;
    var value;
    if (window.ActiveXObject) {
        obj = new ActiveXObject('Microsoft.XMLHTTP');
    } else if (window.XMLHttpRequest) {
        obj = new XMLHttpRequest();
    }
    obj.open('POST', url, false);
    obj.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded');
    obj.send(params);
    var result = Ext.JSON.decode(obj.responseText);
    return result;
}


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM