Правильно ли написано закрытие моего JavaScript? - PullRequest
1 голос
/ 05 января 2012

Я использую следующую функцию закрытия в jqgrid (сетка jquery), чтобы сохранить изменения в редактировании при подкачке в переменную с именем retainedChanges - это выглядит нормально;Я нарушаю любую хорошую практику в javascript;код работает нормально, просто хочу убедиться, что я не представлю функции, которые могут сломаться в будущем

 (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);

Ответы [ 3 ]

2 голосов
/ 05 января 2012

Это работает нормально, хотя вы, вероятно, должны принять jQuery в качестве аргумента:

(function($){

Таким образом, даже если символ $ используется для чего-то другого за пределами вашего замыкания, он выиграет 'Влияние вашего кода внутри замыкания.

Еще 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 голосов
/ 05 января 2012

Есть несколько вещей, которые вы можете улучшить:

1) Вы передаете jQuery функции, но не используете ее (вы используете global object $, если онаопределено).Измените свой код на , чтобы принять один параметр с именем $:

(function($){

2) Вы можете сократить retainedChanges объявление :

var retainedChanges = new Array();

3) Если вы пытаетесь написать плагин jQuery , то следуйте следующему руководству: jQuery: плагины / авторинг

Если нет, то, возможно, используйте другиеглобальный объект чем jQuery?

0 голосов
/ 05 января 2012

Вы передаете jQuery в функцию, которая не имеет аргументов и никогда не использует переданный объект jQuery. Возможно, вы имели в виду:

(function($){

Кроме того, выглядит нормально.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...