Jquery选项格式

Jquery选项格式,jquery,jquery-plugins,Jquery,Jquery Plugins,我正在尝试格式化一些jquery选项,在本例中是自动完成插件。在我的代码中,我可以做到以下几点,但是我确信有一种更简洁/优雅的方式来格式化它 extraParams: { param_1: function(){ var id = $(original).attr("id"); var params = id.split("-"); return params[0]; }, p

我正在尝试格式化一些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]};
     },
但是没有快乐

理想情况下,代码将支持无限的参数


非常感谢您的帮助。

您能在通话前进行转接吗

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,
    ...
   }

你能在通话前分路吗

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,
    ...
   }

实现这一点的一种方法可能是使用一个函数返回带有参数索引的闭包:

// 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);
}
//创建一个函数以返回param函数
函数getParamFunction(i){
返回函数(){
变量id=$(原始).attr(“id”),
params=id.split(“-”);
返回参数[i];
}
}
//现在让您的extraParams对象
var-extraParams={};
//不确定要如何配置,但
//以下是“简单循环”选项:

对于(var i=0;i来说,一种方法是使用一个函数返回带有参数索引的闭包:

// 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);
}
//创建一个函数以返回param函数
函数getParamFunction(i){
返回函数(){
变量id=$(原始).attr(“id”),
params=id.split(“-”);
返回参数[i];
}
}
//现在让您的extraParams对象
var-extraParams={};
//不确定要如何配置,但
//以下是“简单循环”选项:

对于(var i=0;i谢谢大家。我会检查Andy的答案是否正确,尽管这两个答案都是非常宝贵的。事实证明,将参数创建移到自动完成调用之外是关键。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,
    });
}});

谢谢大家。我会检查安迪的答案是否正确,尽管这两个答案都是非常宝贵的。事实证明,将参数创建移到自动完成调用之外是关键。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,
    });
}});