ExtJS 3.4에서 만나지 못한 버그 뽑기 (1)

4244 단어 ExtJs
본고는 오늘부터 제가 하고자 하는 것은 끊임없는 업데이트입니다. 끊임없는 ExtJS3.4의 버그를 공개하고 복구하는 것입니다.주의해야 할 것은 버전이 4.0이 아니라 3.4라는 것이다. 4.0의 변동과 변화가 비교적 크기 때문에 번호에 맞추어 자리에 앉지 마라.
헤헤, 본인은 글을 잘 쓰지 않지만, 이 버그들 때문에 나를 오랫동안 괴롭혔기 때문에, 매우 아파서, 마음속의 한을 풀기 위해 뽑아라.
본고에서 지적한 버그 복구 방식은 기존 코드를 수정하지 않고 외부에서 하나의 파일을 도입하면 된다.
이 프레임워크를 사용하고 있든 사용하지 않든 ExtJS의 버전은 3.4입니다.
 
또한, 나는 매일 업데이트를 보장할 수 없기 때문에 글을 쓰든 안 쓰든 내가 업무 중에 버그를 만났느냐에 달려 있다.됐어. 뽑아.
본문을 보시려면 Javascript 기초가 좀 필요합니다. 이것은 주의해야 합니다.
 
BUG 출처 Ext.data.DataStore
BUG 설명은 JsonWriter를 사용하여 데이터를 자동으로 저장합니다.
BUG 구성을 트리거하려면 다음과 같이 하십시오.
Ext.data.JsonWriter -> listfu : true
Ext.data.DataStore -> autoSave : true
Ext.data.DataStore -> writer 가 listfu 로 설정된 JsonWriter
위 조건을 충족하면 이 버그를 터치할 수 있습니다
트리거 환경:
Ext.data를 통해Store의remove 방법으로 두 개 이상의 데이터를 삭제할 때.
빨간색은 BUG 소스 발생 부분입니다.
Ext.data.Store
 
remove : function(record){

        if(Ext.isArray(record)){

            Ext.each(record, function(r){

                this.remove(r);

            }, this);

            return;

        }

        var index = this.data.indexOf(record);

        if(index > -1){

            record.join(null);

            this.data.removeAt(index);

        }

        if(this.pruneModifiedRecords){

            this.modified.remove(record);

        }

        if(this.snapshot){

            this.snapshot.remove(record);

        }

        if(index > -1){

            this.fireEvent('remove', this, record, index);

        }

    },

 
명세서 1
관련 코드:
 
if (this.writer) {

            this.on({

                scope: this,

                add: this.createRecords,

                remove: this.destroyRecord,

                update: this.updateRecord,

                clear: this.onClear

            });

        }

명세서 2
destroyRecord : function(store, record, index) {

        if (this.modified.indexOf(record) != -1) {  

            this.modified.remove(record);

        }

        if (!record.phantom) {

            this.removed.push(record);



            

            

            

            record.lastIndex = index;



            if (this.autoSave === true) {

                this.save();

            }

        }

    },


 
명세서
자, 이 버그를 간단히 설명해 드릴게요. 스토어에서 이벤트remove를 자체적으로 추가했기 때문에remove에서 Record(Ext.data.Record)를 할 때remove 이벤트를 터치합니다.
명세서의 빨간색 코드 부분과 같이 이 이벤트가 호출되었습니다.이 방법은destroyRecord 방법에 전달됩니다. 이때 코드의this를 주의하십시오.autoSave 세션.
listful과 autoSave를 열었기 때문에ajax 호출을 사용합니다.
그러나 우리가 삭제한 데이터가 여러 개이기 때문에 이 호출은 여러 번 실행될 것이다.
하나를 삭제하면 한 번, 두 개를 삭제하면 두 번, 세 개를 삭제하면 세 번을 실행한다.
다음은 이 버그의 외부 코드를 복구하는 것입니다. ext-all.js 또는 ext-all-debug.js 다음에 이 코드를 도입하면 인용할 새 파일을 만들 수 있습니다.
 
Ext.apply( Ext.data.Store.prototype, {

	

	_bug0_remove : function( record ) {

		var index = this.data.indexOf(record);

        if(index > -1){

            record.join(null);

            this.data.removeAt(index);

        }

        if(this.pruneModifiedRecords){

            this.modified.remove(record);

        }

        if(this.snapshot){

            this.snapshot.remove(record);

        }

        if(index > -1) {

            this.fireEvent('remove', this, record, index);

        }

	},

	

	//  。

	remove : function(record) {

        if(Ext.isArray(record)) {

            Ext.each(record, function(r){

                this._bug0_remove(r);

            }, this);

        } else {

        	this._bug0_remove(record);

        }

        

        if (this.autoSave === true) {

			this.save();

		}

    },

    

    //  。 record。

    destroyRecord : function(store, record, index) {

    	if (this.modified.indexOf(record) != -1) {  

            this.modified.remove(record);

        }

        if (!record.phantom) {

            this.removed.push(record);

            record.lastIndex = index;

            //  , 

			//if (this.autoSave === true) {

			//	this.save();

			//}

        }

    },

    

})

 

좋은 웹페이지 즐겨찾기