2011-08-29 5 views
0

나는 전반적인 js bloat를 줄이기 위해 매개 변수를 전달하는 추상화 된 jquery 대화 상자 함수를 만들려고합니다. 내 자바 스크립트는 이와 같은 사례의 현재 가득 : 내 대화 호출을 줄일 수 있다는 희망으로bloating을 줄이기 위해 jquery 대화 호출을 추상화합니다.

function LoadDialog(target, height, confirm_button, function_call) { 

$(target).dialog({ 
    resizable: false, 
    height: height, 
    modal: true, 
    buttons: { 
     confirm_button: function() { 
      function_call; 
      $(this).dialog("close"); 
     }, 
     Cancel: function() { 
      $(this).dialog("close"); 
     } 
    } 
}); 

}

:

$(".claim_issue_lb").click(function (e) { 

    $(function() { 

     $("#dialog-claim").dialog({ 
      resizable: false, 
      height: 240, 
      modal: true, 
      buttons: { 
       "Claim Issue": function() { 
        ProcessDealerAction("claim"); //function to be called upon success 
        $(this).dialog("close"); 
       }, 
       Cancel: function() { 
        $(this).dialog("close"); 
       } 
      } 
     }); 

    }); 
}); 

는이 문제를 해결하기 위해, 나는 다음을 생성 다음 예를 참조하십시오.

$(".claim_issue_lb").click(function (e) { 

    LoadDialog("#dialog-claim", 240, "Claim Issue", ProcessDealerAction("claim")); 

}); 

confi rm 대화 상자가 나타나면 "Yes do it"또는 "Cancel"을 클릭하지 않고 대화 상자가 자동으로 닫힙니다.

이 문제를 해결하는 방법이 확실하지 않거나 전체적인 접근 방식이 처음부터 결함이있는 것으로 판단됩니다.

+0

우리가 좀 더 많은 코드를 볼 수 있습니까? 귀하가 게시 한 내용은 귀하가 가지고있는 문제를 해결하는 데 도움이되지 않습니다. – rlemon

+0

@rlemon. 그것은 그가 함수 리터럴로서'ProcessDealerAction'을 전달하려고 시도하는 대신 호출 결과를 전달합니다. 내 대답을 확인해. –

답변

1

LoadDialog("#dialog-claim", 240, "Claim Issue", ProcessDealerAction("claim"));

즉시 ProcessDealerAction를 실행합니다. 결과가 아닌 function을 여기에 전달해야합니다.

function LoadDialog(target, height, confirm_button, function_call, function_args) { 
... 
LoadDialog("#dialog-claim", 240, "Claim Issue", ProcessDealerAction, ["claim"]); 

또는

LoadDialog("#dialog-claim", 240, "Claim Issue", (new function(){ProcessDealerAction("claim"));}))

가까이 당신이 할 필요가 어디에 당신을 얻을 것이다. 또한 콜백을 올바르게 호출해야합니다.

confirm_button: function() { 
      function_call(); 
      $(this).dialog("close"); 
     }, 

또는 별도로 인수를 전달하고 익명 함수가 필요하지하기로 결정한 경우 :

confirm_button: function() { 
      function_call.apply(this, [function_args]); 
      $(this).dialog("close"); 
     }, 
+0

나는 밑바닥 접근을 시도하고 아직도 자동 달렸다. 내가 제일 먼저 할게. 감사. 두 번째 솔루션에 대한 – Ian

+0

try function_call.apply (this, [function_args]) 왜 그런지 모르겠지만 이것은 과거에 나에게 도움이 되었습니까 ?? – rlemon

+0

@ 레몽 귀하의 제안에 의해 그랬습니다. 다른 방법으로 포맷 오류가 발생하거나 일시 중지없이 계속 실행 중입니다. 감사! – Ian

관련 문제