3

データグリッドがあり、グリッド内の任意のレコードをダブルクリックすると、約100以上の表示フィールドがあるformPanelに移動します。ここでの私の問題は、loadRecordがこれらの100以上の表示フィールドすべてをロードするのに20秒近くかかるということです。これを行うためのより速い方法はありますか?どんな助けやアイデアも大歓迎です。

Ext.Ajax.request({

    url: someurl
    method: 'POST',
    params: {
        params: params
    },

    success: function(response) {
        var responseData = response.responseText;
        var doc = new DOMParser().parseFromString(responseData, "text/xml");
        store.loadRawData(doc);
        var formPanel = Ext.getCmp('FormPanel');
        var formPanelData = store.getAt(0);
        console.log("Its fast upto here!!");
        formPanel.getForm().loadRecord(formPanelData);
       console.log("Takes upto 20 secs to get here!!");
        var vp = Ext.getCmp('viewport');
        vp.getLayout().setActiveItem('formPanel');


    }
});
4

2 に答える 2

6

ロード中にレイアウトを一時停止します。

Ext.suspendLayouts();
form.loadRecord(foo);
Ext.resumeLayouts(true);
于 2012-11-21T00:44:37.077 に答える
0

EXTJ4.1.3のツリーパネルでデータを除外する場合でも

レイアウトを一時停止すると、検索速度が大幅に向上します。下記参照 :

applyFilterFn: function(filterCmp) {

        Ext.suspendLayouts();  // Adding by Lokesh to speed up

            var me = this;

            var root = this.getTreeStore().getRootNode();

            me.registerFilter(filterCmp);
            me.filtered = true;

            if(typeof filterCmp.beforeFilter === 'function'){
                    filterCmp.beforeFilter();
            }
            root.cascadeBy(function(node){
                    if(node.isRoot() && !me.rootVisible){ return; }//skip invisible root

                    var nid = (me.useDataIds===true)? node.data.id:node.id;

                    if(typeof me.filterNodeHash[nid]==='undefined'){
                            me.filterNodeHash[nid] = [];

                    }
                    if(filterCmp.filterFn.call(filterCmp,node)){
                            me.filterNodeHash[nid][filterCmp.id] = true;
                          "+me.filterNodeHash[nid][filterCmp.id]);

                    }else{
                            me.filterNodeHash[nid][filterCmp.id] = false;

                            //console.log("value of "+node.data.task+", "+me.filterNodeHash[nid][filterCmp.id]);
                    }
            },me);

            root.eachChild(function(childNode){
                Ext.fly(me.getNodeByRecord(childNode)).setDisplayed(true);
            });                
            root.eachChild(function(childNode){
                me.applyFilters(childNode,0); ////////added changed code
            });               
      //   console.log("root node id "+this.getTreeStore().getRootNode().getId().data.task);
            Ext.resumeLayouts(true); // put it to resume your css layouts

            if(typeof filterCmp.afterFilter === 'function'){
                    filterCmp.afterFilter();
            }

    },// applyFilterFn you may call from a differnt javascript file
于 2013-09-17T08:15:05.737 に答える