2014-11-21 6 views
0

apprise 함수를 사용하면 true를 반환하고 No를 반환하면 false를 반환합니다. 이 메서드를 사용하여 onclientclick 메서드로 컨트롤의 유효성을 검사합니다. return 매개 변수는 함수가 중첩되어 있기 때문에 되돌릴 수 없습니다.
사람은 위의 JS 함수가 반환되지만 제대로 작동 내가 제대로 나는 토마스가 추천 한 것에하지만 여전히 나던 검증하여 자바 스크립트를 편집 한중첩 함수 내에서 반환

function test(e) { 

    apprise('Are you sure you want to add a 12 Month Donation?', { 'verify': true }, 
     function (r) { 
     if (r) { 
      // user clicked 'Yes' 
      apprise("Donation Added"); 
     } 
     else { 
      // user clicked 'No' 
      return false; 

     } 
    });  
} 

테스트 (예) 메소드로 돌아갈 수있는 방법을 알고 올바른 매개 변수

여기에 편집 된 JS 및 ASP 파트가 있습니다. onclick 메서드는 새로운 코드에서는 결코 도달하지 못했지만 반환 매개 변수는 정확합니다.

OnClientClick ="if (!test()) {return false;}" 
onclick="btn12MonthDonate" 



function test() { 
    function donationAdded() { 
     console.log("yes"); 
     return true; 
    }; 
    function donationNotAdded() { 
     console.log("no"); 
     return false; 
    }; 
    apprise('Are you sure you want to add a 12 Month Donation?', { 'verify': true }, 
     function (r) { 
      if (r) { 
       // user clicked 'Yes' 
       apprise("Donation Added"); 
       donationAdded(); 
      } 
      else { 
       // user clicked 'No' 
       donationNotAdded(); 

      } 
     }); 
} 
+0

'apprise()'는 무엇을 반환합니까? – PoweredByOrange

+0

@Quentin이 질문을 중복으로 표시하는 것은 괜찮습니다. 그러나 링크 된 스레드에서 메커니즘은 설명되지 않습니다. 기술적으로 대답은 정확하지만 실제로는 상세하지 않습니다. –

+0

@ThomasJunk - 답변을 개선하거나 기존 질문에 새로운 답변을 추가 할 수 있습니다. – Quentin

답변

0

을 반환하는의 apprise α- 함수는 어떤 매개 변수가 있습니다 a callback (즉, 매개 변수로 전달되고 특정 시점에 호출되는 함수).

일반적인 제어 흐름과 같다 : 선형/동기 설정 제어 흐름이다

function(){ 
    Step1 ... 
    Step2 ... 
    ... 
    Step n 
    return; 
}; 

.

function(callback){ 
    Step1 ... 
    Step2 ... 
    ... 
    callback(); 
    ... 
    Step n 
    return; 
}; 

이벤트 중심 - 프로그램에 적합합니다 : 대화 상자가 팝업과 정확한 순간, 사용자

반면에 callback비동기 제어 흐름을 용이하게 선택을했고 결과가 알려지면 함수가 호출됩니다. 어떤 시점에서 콜백이 호출됩니다.

그래서 당신은 당신의 제어 흐름, 함수에 반환이 함수에 반환해야하는 부분, 정의하려면 :

function(){ 
    var goOnHere=function(result){ 

    }; 
    Step1 ... 
    Step2 ... 
    callFunction(goOnHere); 
    Step n 
    return; 
}; 

function(callback){ 
    Step1 ... 
    Step2 ... 
    ... 
    callback(result); 
}; 

그래서 코드를 변환 할 수 있습니다에 :

function test(e) { 
    function donationAdded(){ 
     console.log("yes"); 
    }; 
    function donationNotAdded(){ 
     console.log("no"); 
    }; 
    apprise('Are you sure you want to add a 12 Month Donation?', { 'verify': true }, 
     function (r) { 
     if (r) { 
      // user clicked 'Yes' 
      apprise("Donation Added"); 
      donationAdded(); 
     } 
     else { 
      // user clicked 'No' 
      donationNotAdded(); 

     } 
    });  
} 
을 당신이 F에서 살펴 경우

function(){ 
    var goOnHere=function(result){ 

     return value; // returns to the calling point 
    }; 
    Step1 ... 
    Step2 ... 
    callFunction(goOnHere); //pass flow to call function, which itself calls goOnHere 
    Step 3 
    return; 
}; 

: 명확성을 위해

, 나는 더 설정 제어 흐름을 설명

  • 2 단계 goOnHere
  • goOnHere 반환
  • callback에게

    • 1 단계
    • callFunction 순수 전화이기 때문에, 모든 리턴 값은 멀리
    • 을 발생합니다 : 저, 그것은 위에서 아래로 이동
    • 3 단계
    • return 012에서 반환합니다

    값을 반환하는 직접적인 방법은 없습니다. 편도입니다.

    당신은 "이벤트"로 callbacks을 구현했습니다 자체 내부 기능에 "모델"을 전달합니다

    가능한 방법은 밖으로 MVC - 스타일 프로그래밍 될 것이다. 따라서 "결과"를 알면 모델을 적절한 상태로 설정합니다. 그 후, 모델은 change -event를 발생시키고, 모든 가입자는 이에 반응 할 수 있습니다. 세부 정보는이 스레드를 벗어납니다.

    이벤트 구동- 프로그래밍의 경우 다른 사고 방식이 필요합니다. 그리고 처음에는 그 개념에 대해 머리를 터는 것이 어렵습니다.

  • +0

    Thomas가 귀하의 코드를 찾고 있습니다. 불행히도 나는 이것을 여전히 얻을 수있다. 아무 것도 반환 false를 추가했지만 내 onclientclick 이벤트는 여전히 ASP 파트에 대해 위에서 확인하지 않습니다 – AShah

    +0

    코드가 작동하지 않습니다. 문제는 controll-flow입니다 :'donationAdded'를 호출하면,'apprise'에 전달 된 익명 함수 내에서 그렇게합니다. 'donation added '를 호출하면 흐름은 이전에 정의 된 함수'donationAdded'로 전달됩니다. 함수의 마지막 줄이'return'-statement이면 흐름은 익명 함수로 돌아갑니다. –

    0

    사실 나는 반환하지 않아야한다고 생각합니다. return 문을 추가 한 함수는 콜백 함수입니다. 콜백 메커니즘은 반환 메커니즘의 대안입니다. 대신 plbsam 쓴 것처럼 ... 당신이 일을 끝낼 수있는 콜백 함수 내에서 다른 함수를 호출 할 수 있습니다

    기능 검사 (예) {

    apprise('Are you sure you want to add a 12 Month Donation?', { 'verify': true }, 
        function (r) { 
        if (r) { 
         // user clicked 'Yes' 
         apprise("Donation Added"); 
        } 
        else { 
         // user clicked 'No' 
         toBeCalledIfFalse(false); 
        } 
    
        } 
    )}; 
    
    function toBeCalledIfFalse(){ 
        //code to handle false 
    } 
    
    관련 문제