Можно ли включить событие в функцию JavaScript? - PullRequest
1 голос
/ 21 марта 2011

Мне было просто интересно, будет ли работать событие jqgrid из основного javascript и отделять его с помощью другого javascript в виде функции?что я пытаюсь сделать, это так.у меня есть код:

     ...//some code here
     serializeGridData: function(postData) {
        var jsonParams = {
            'SessionID': $('#eSessionID3').val(),
            'dataType': 'data',
            'recordLimit': postData.rows,
            'recordOffset': postData.rows * (postData.page - 1),
            'rowDataAsObjects': false,
            'queryRowCount': true,
            'sort_fields': postData.sidx
        };

        if (postData.sord == 'desc')
        {
            ...//some code here
        }           
        else
        {
            ...//some code here
        }

        return 'json=' + jsonParams;
    },

    loadError: function(xhr, msg, e) { 
        showMessage('errmsg');
    },
            ...//some code here

Я хочу получить этот код и записать его в другой файл javascript и сделать это как функцию, чтобы мой другой файл мог использовать этот ... это возможно?

я создал нечто подобное в моем другом файле javascrtip, куда я планировал поместить все свои функции.Вот код (functions.js):

function serialLoad(){
   serializeGridData: function(postData) {
      var jsonParams = {
         'SessionID': $('#eSessionID3').val(),
         'dataType': 'data',
         'recordLimit': postData.rows,
         'recordOffset': postData.rows * (postData.page - 1),
         'rowDataAsObjects': false,
         'queryRowCount': true,
         'sort_fields': postData.sidx
      };

      if (postData.sord == 'desc')
      {
          ...//some code here
      }           
      else
      {
          ...//some code here
      }
      return 'json=' + jsonParams;
   },

   loadError: function(xhr, msg, e) { 
       showMessage('errmsg');
   }
}

это не работает и отображает синтаксическую ошибку сообщения.я не знаю как это исправить.Есть ли кто-нибудь, кто может мне помочь .?

Ответы [ 3 ]

2 голосов
/ 21 марта 2011

Прежде всего ответ на ваш правильный вопрос. Если вы определите в файле functions.js некоторую глобальную переменную, например, myGlobal:

myGlobal = {};
myGlobal = serializeGridData: function(postData) {
    // ... here is the implementation
};

вы можете использовать его в другом файле JavaScript, который должен быть включен после functions.js файла:

serializeGridData: myGlobal.serializeGridData

(просто используйте такой параметр в определении jqGrid).

Если вы хотите использовать параметр serializeGridData со значением в большинстве ваших jqGrids, вы можете заменить значение по умолчанию serializeGridData в файле functions.js :

jQuery.extend(jQuery.jgrid.defaults, {
    datatype: 'json',
    serializeGridData: function(postData) {
        // ... here is the implementation
    },
    loadError: function(xhr, msg, e) { 
        showMessage('errmsg');
    }
});

В примере я переписываю дополнительно значение по умолчанию datatype: 'xml' jqGrid для параметра datatype: 'json'. Это показывает, что вы можете установить значения по умолчанию для любого параметра jqGrid.

Мне кажется, что вам действительно нужно использовать параметр prmNames jqGrid для переименования некоторых имен по умолчанию стандартных параметров jqGrid. Например с

prmNames: {
    rows:"recordLimit",
    sort: "sort_fields",
    search:null,
    nd:null
}

Вы переименовываете стандартный параметр rows в recordLimit, параметры sidx в sort_fields и удаляете параметры _search и nd для отправки.

Кроме того, вы можете использовать postData с некоторыми свойствами, определенными как функция (подробности см. здесь ). Например:

postData: {
    SessionID: function() {
        return $('#eSessionID3').val();
    },
    rowDataAsObjects: false,
    queryRowCount: true,
    dataType: 'data',
    recordOffset: function() {
        var pd = jQuery("#list2")[0].p.postData;
        return pd.recordLimit * (pd.page - 1);
    },
    json: function() {
        var pd = jQuery("#list2")[0].p.postData;
        return {
           SessionID: $('#eSessionID3').val(),
           dataType: 'data',
           recordOffset: pd.recordLimit * (pd.page - 1),
           rowDataAsObjects: false,
           queryRowCount: true,
           sort_fields: pd.sort_fields
        };
    }
}

Я использовал здесь оба параметра json, которые вы используете в данный момент, и добавьте такие параметры, как SessionID, queryRowCount и т. Д. Непосредственно в список параметров, которые будут отправлены. Конечно, достаточно отправить только один путь (либо json, либо остальные), чтобы отправить дополнительную информацию, которая вам нужна.

0 голосов
/ 21 марта 2011

Второй пример неверен, так как вы объявляете объект javascript в качестве тела функции, то, что вы могли бы сделать, это:

function serialLoad() {
    // Return an object with the required members
    return {
        serializeGridData: function(postData) { ... },
        loadError: function(xhr, msg, e) { ... }
    };
}
0 голосов
/ 21 марта 2011

Вы смешиваете объявление функции и буквенное обозначение объекта. Этот синтаксис: property: value используется при создании объекта с литеральной нотацией объекта:

var obj = {
   prop: val,
   prop2: val
};

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

Один из способов - создать две функции: одну для serializeGridData и одну для loadError, например

function serialLoad(postData){
  var jsonParams = {
     //...
  };

  if (postData.sord == 'desc') {
      //... some code here
  }           
  else {
      //... some code here
  }
  return 'json=' + jsonParams;
}

function onError(xhr, msg, e) { 
   showMessage('errmsg');
}

Затем вы можете назначить их в другом файле для объекта:

// ... some code here
serializeGridData: serialLoad,
loadError: onError,
//... some code here

Другой способ - передать рассматриваемый объект функции и назначить там свойства:

function attachLoadHandler(obj) {
    obj.serializeGridData = function(postData) {
        //...
    };

    obj.loadError = function(xhr, msg, e) {
        //...
    };
}

Затем вы должны передать созданный вами объект этой функции:

attachLoadHandler(obj);

Но я думаю, что первый подход легче понять.

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