2011-10-10 4 views
1

일부 jquery 옵션을 포맷하려고합니다.이 경우에는 자동 완성 플러그인을 사용하고 있습니다.Jquery options formatting

 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]}; 
    }, 

: 나는 다음과 같은 노력했습니다

 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]; 
     }, 
     }, 

내 코드에서 나는 ... 그러나 나는이 서식을 더 응축/우아한 방법이 확신, 다음을 작업하기 얻을 수 있습니다 그러나 기쁨 ..

이상적으로 코드가 어떤 도움을 주시면 더 좋구요

PARAMS의 무제한 #을 ... 지원하지 않을 것이다.

답변

0

전화하기 전에 분할 할 수 있습니까? 옵션 객체에

// 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을 설정할 수 있습니다 :이 작업을 수행하는

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

한 가지 방법은 PARAM 지수 폐쇄를 반환하는 함수를 사용할 수 있습니다.

@Andy 메모에 따르면, 이러한 기능이 필요한 이유가 실제로 있습니까? .autocomplete()으로 전화 할 때이 설정을 구성 할 수 있다면 더 간단 할 것입니다.

0

감사합니다. Andy의 답변을 올바른 것으로 확인 하겠지만 두 답변 모두 매우 중요합니다. 자동 완성 호출 외부에서 매개 변수 생성을 이동하는 것이 핵심이었습니다.

$.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, 
    }); 
}}); 

FWIW,이 코드가 자동 완성에 대한 값을 뽑아되는 jEditable + 자동 완성 필드에 추가 매개 변수를 전달하는 것입니다 : nrabinowitz의 대답은 여기에

최종 비트의 ... 나 확장 기능을 만들어 주었다 DB에서. 우리는-jeditable .cs를 포함하는 요소의 id에 따라 추가 매개 변수를 전달할 수 있습니다이 경우

$(".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' 
    } 
}); 

을 : Working example of jeditable and autocomplete working together 아래

내가 jEditable/자동 완성 필드가 해고 어떻게 참조 -autocomplete 클래스를 data 옵션에 정의 된 스크립트에 추가하십시오. 예를 들어 :

/path/to/autocomplete_data_script?query=stuff_you_type&param_1=hello&param_2=world 
:

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

이가/경로 추가 PARAMS를 전달합니다/브라우저의 실제 호출은 같을 것이다/autocomplete_data_script 할 수 있도록