2012-01-05 4 views
1

jqugrid (jquery 그리드)에서 다음 함수 클로저를 사용하여 'retainedChanges'라는 변수에서 페이징 할 때 편집 내용을 유지합니다. 나는 자바 스크립트에서 좋은 연습을 위반하는 임;내 자바 스크립트 클로저가 올바르게 작성 되었습니까?

(function($){ 

이 방법 : 코드는 괜찮아 그냥 당신은 아마 인수로 jQuery를 받아 들여야하지만, 이것은 잘 작동 미래

(function($){ 
     var retainedChanges; 
     retainedChanges = new Array(); 
     $.retainChangesOnPaging = function(){ 
     var changedCells = $('#grid').jqGrid('getChangedCells'); 
     // loop over changedCells array, removing duplicates if you want to... 
      return retainedChanges.push(/* this is inside the loop; push current value to array*/); 
     .... 
     } 
     $.getRetainedChanges = function(){ 
     return retainedChanges; 
     } 
    })(jQuery); 
+1

왜 함수의 처음 두 줄을 결합하여'var retainedChanges = [];'가되지 않습니까? – mc10

+0

몇 가지 제안 사항 :'new Array()'대신'[]'를 사용하고 관련이없는 경우 jQuery 객체에 저장하지 마십시오. – ThiefMaster

답변

2

에 깰 수있는 기능을 소개 해달라고 있는지 확인하려면 작품 $ 기호가 클로저 밖의 다른 용도로 사용 되더라도 클로저 내부에 코드가 적용되지는 않습니다.

2 가지 더 :

1) 선언과 함께 변수를 할당하고, [] 대신 new Array()을 사용해야합니다.
2) $ 기호가 누락되었습니다 (('#grid')). 전체 개요를 들어


은, 이것 좀 봐 :

(function($){ 

    var retainedChanges = []; 

    $.retainChangesOnPaging = function(){ 
    var changedCells = $('#grid').jqGrid('getChangedCells'); 
    // loop over changedCells array, removing duplicates if you want to... 
    return retainedChanges.push(/* this is inside the loop; push current value to array*/); 
    .... 
    } 

    $.getRetainedChanges = function(){ 
    return retainedChanges; 
    } 

})(jQuery); 
+0

예. 원래 코드에서이 코드를 추가했습니다. - 여기에 추가했습니다. - 감사합니다. –

0

당신은 전달 jQuery 오브젝트를 인수가 결코 사용하는 기능에 jQuery를 전달하는 당신은 의미가 있습니다.

(function($){ 

외모가 좋지 않습니다.

0

이 당신이 개선 할 수있는 몇 가지 있습니다 :

1) 함수에 jQuery을 통과,하지만이 정의 된 경우) 당신은 글로벌 객체 $를 사용 (사용하지 마십시오.$ 이름, 에 코드가 하나 개의 매개 변수를 받아 수정 :

(function($){ 

2) 당신은 retainedChanges 선언을 단축 할 수 있습니다

var retainedChanges = new Array(); 

3) 쓰기 jQuery 플러그인하려고하는 경우, 다음 자습서를 따르십시오. jQuery: Plugins/Authoring

그렇지 않은 경우 n은 jQuery과 다른 전역 객체를 사용할 수 있습니까?

관련 문제