2012-01-05 4 views
1

私はjqgrid(jqueryグリッド)で次の関数クロージャを使用して、 'retainedChanges'という名前の変数でページングするときの変更を保持します。 Im私はjavascriptで良い練習を壊す;JavaScriptのクロージャーが正しく書かれていますか?

(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

なぜ関数の最初の2行を組み合わせて 'var retainedChanges = [];'にしないのですか? – mc10

+0

いくつかの提案: 'new Array()'の代わりに '[]'を使い、関連していなければjQueryオブジェクトに格納しないでください。 – ThiefMaster

答えて

2

に破ることができる機能を導入していけないことを確認するWorks $シンボルがクロージャの外側の何かに使用されていても、クロージャの内側にコードが反映されることはありません。

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とは異なるグローバルオブジェクトを使用する可能性がありますか?

関連する問題