JQuery параметры форматирования - PullRequest
1 голос
/ 11 октября 2011

Я пытаюсь отформатировать некоторые параметры jquery, в данном случае для плагина автозаполнения.В моем коде я могу заставить работать следующее, но я уверен, что есть более сжатый / элегантный способ отформатировать это ...

      extraParams: {
        param_1: function(){
          var id = $(original).attr("id");
          var params = id.split("-");
          return params[0];
        },
        param_2: function(){
          var id = $(original).attr("id");
          var params = id.split("-");
          return params[1];
        },
        param_3: function(){
          var id = $(original).attr("id");
          var params = id.split("-");
          return params[2];
        },
        param_4: function(){
          var id = $(original).attr("id");
          var params = id.split("-");
          return params[3];
        },
      },

Я пробовал следующее:

     extraParams: function(){
       var id = $(original).attr("id");
       var params = id.split("-");
       return {param_1: params[0], 
               param_2: params[1],
               param_3: params[2],
               param_4: params[3]};
     },

Но не радость ..

В идеале код должен поддерживать неограниченное количество параметров ...

Любая помощь очень ценится.

Ответы [ 3 ]

1 голос
/ 11 октября 2011

Одним из способов сделать это может быть использование функции, которая возвращает замыкание с вашим индексом параметра:

// create a function to return the param function
function getParamFunction(i) {
    return function() {
        var id = $(original).attr("id"),
            params = id.split("-");
        return params[i];
    }
}

// now make your extraParams object
var extraParams = {};
// not sure how you want to configure this, but
// here's the "simple loop" option:
for (var i=0; i<4; i++) {
    extraParams['param_' + i] = getParamFunction(i);
}

Теперь вы можете установить extraParams: extraParams в вашем объекте настроек.

Но, как отмечает @Andy, есть ли какая-то причина, по которой эти функции должны быть? Если вы можете настроить это во время вызова .autocomplete(), это, вероятно, более простой вариант.

0 голосов
/ 11 октября 2011

Спасибо, ребята.Собираюсь проверить ответ Энди как правильный, хотя оба ответа были неоценимы.Оказалось, что перемещение параметра создания вне вызова автозаполнения было ключом.Ответ nrabinowitz помог мне сделать функцию расширяемой ...

Вот последний бит:

 $.editable.addInputType('autocomplete', {
  element : $.editable.types.text.element,
  plugin : function(settings, original) {

    // make the extraParams object
    var extraParams = {};
    var id = $(original).attr("id");
    var params = id.split("-");
    for (var i=0; i<params.length; i++) {
        extraParams['param_' + i] = params[i];
    }

    $('input', this).autocomplete(settings.autocomplete.data, {
      dataType:'json',
      // Using the extra params parameter
      // we can pass additional variables to the
      // autocomplete callback function.
      // for example data?q=et&param_1=1234.
      // in this case, by passing vendor_id
      extraParams: extraParams,
      parse: function(data) {
        return $.map(data, function(item){
          return {
            data: item,
            value : item.Key,
            result: item.value
          }
        })
      },
      formatItem: function(row, i, n) {
        return row.value;
      },
      mustMatch: false,
    });
}});

Этот код предназначен для передачи дополнительных параметров в поле jEditable + autocomplete, где значения дляавтозаполнение вытягивается из БД.См. Рабочий пример совместной работы jeditable и autocomplete

Ниже приведен пример запуска поля jEditable / autocomplete:

 $(".cs-jeditable-autocomplete").editable("/path/to/jEditable_save_script", { 
    indicator : "<img src='images/indicator.gif'>",
    type      : "autocomplete",
    tooltip   : "Click to edit...",
    submit    : 'Save',
    //onblur    : "submit",
    style   : 'inherit',
    autocomplete : {
       data : '/path/to/autocomplete_data_script'
    }
});

В этом случае мы можемпередать дополнительные параметры на основе идентификатора элемента, содержащего класс .cs-jeditable-autocomplete, в сценарий, определенный в параметре data.Например:

<span id="hello-world" class=".cs-jeditable-autocomplete">click to edit</span>

Это передаст дополнительные параметры в / path / to / autocomplete_data_script, чтобы фактический вызов из браузера выглядел так:

/path/to/autocomplete_data_script?query=stuff_you_type&param_1=hello&param_2=world
0 голосов
/ 11 октября 2011

Вы можете сделать разделение перед вызовом?

var id = $(original).attr("id");
var params = id.split("-");
var myExtraParams = {param_1: params[0], 
                   param_2: params[1],
                   param_3: params[2],
                   param_4: params[3]};


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