close

同時在 Chrome / Firefox / IE 開啟樹狀目錄,想不到只有 IE 沒辦法顯示 TreePanel 的節點。在網路上搜尋一下找到兩個辦法,最後我又發現加上昨天的 requestMethod 也有效,一併筆記。



解決方法一:《ExtJs TreePanel使用TreeLoader在IE下无法正常加载显示的解决方法》

這裡的作法是用 AJAX 取得值,再把值餵給 TreePanel。

Ext.Ajax.request({
    url: 'xxx.ashx',
    success: function(request) {
        // forumTree 是一個 TreePanel,在這裡透過 AJAX 取值後,把值填回 forumTree 中
        var data = Ext.util.JSON.decode(request.responseText);
        forumTree.getRootNode().appendChild(data);
        forumTree.getRootNode().expandChildNodes(true);
        hideLoading();
    },
    failure: function() {
        hideLoading();
        Ext.MessageBox.show({
            title: 'Error Messate',
            msg: '取得資料時發生異常,請重試。',
            buttons: Ext.MessageBox.OK,
            icon: Ext.MessageBox.ERROR
        });
    }
});




解決方法二:
《ExtJs2.0学习系列(13)--Ext.TreePanel之第二式(上) (转)》

這個作法是在接獲 loadexception 事件時,再次執行重新讀取作業,直到取得資料為止。

loader:new Ext.tree.TreeLoader({
    url:"json.ashx",
    listeners:{
        "loadexception":function(loader,node,response){
            node.loaded = false;
            node.reload.defer(10,node); //不停重新讀取,直到取得為止
        }
    }
})




我自己的做法是和昨天遇到的狀況類似,加上 requestMethod,加上去在 IE 就可以正常讀出樹狀節點了。

loader: new Ext.tree.TreeLoader({
            dataUrl: 'tree.ashx',
            requestMethod: 'GET',
            listeners: {
                "beforeload": function() { app.loading = app.MenuTree.body.mask(); },
                "loadexception": function(loader, node, response) { },
                "load": function(loader, node, response) {
                    if (response.status == 200) {
                        app.MenuTree.body.unmask();
                    }
                }
            }
}),





arrow
arrow
    全站熱搜

    小攻城師 發表在 痞客邦 留言(0) 人氣()