0

바인딩에 평가 나는 다음과 같은 코드가 있습니다 (! null가 아닌)의 jQuery 인수

var profileToRemove = null; 

//... 

$("#buttonRemoveProfile").on("tap", {profile : profileToRemove}, removeProfile); 

//... 

function removeProfile(event){ 
    console.log(event.data); 
    var profile = event.data.profil; 
    if(profile==null || profile.name==null) { 
     alert("Erreur lors de la suppression du profil"); 
    } 
    else { /*remove profile*/ } 
} 

"#buttonRemoveProfile"에있는 모든 탭하기 전에 "를 profileToRemove는"원하는 값으로 설정 . 그러나 내 함수 removeProfile은 "null"(event.data는 {profile : null}) 또는 profileToRemove의 초기 값이 무엇이든간에 값을받습니다.

그래서 현재 처리기에 removeProfile의 현재 값을 전달할 수 있습니까?

감사합니다.

답변

1

on()의 데이터 매개 변수는 오브젝트를, 그 객체의 값은 profileToRemove 변수가 이상 (잘못 입력하는) 어떤 식 으로든 업데이트 event.data.profile하지 않는 변화, 바인딩시에 잠 깁니다. 이미 높은 범위의 변수를 가지고

PROOF

, 데이터는 당신이 원하는 것을 반환하는 기능을 포함하도록 직접

var profileToRemove = null; 

$("#buttonRemoveProfile").on("tap", removeProfile); 

//... 

function removeProfile(){ 
    if(profileToRemove === null || profileToRemove.name === null) { 
     alert("Erreur lors de la suppression du profil"); 
    } else { 
     /*remove profile*/ 
    } 
} 
0

가 설계를 변경 것을 사용하는 것이 더 쉽습니다 같다 : 당신이 공상 얻고 싶은 경우에

$("#buttonRemoveProfile").on("tap", {profile : function() { 
     return profileToRemove; 
    } 
}, removeProfile); 

function removeProfile(event){ 
    console.log(event.data); 
    var profile = event.data.profile(); // Call the profile function 
    if(profile==null || profile.name==null) { 
     alert("Erreur lors de la suppression du profil"); 
    } 
    else { /*remove profile*/ } 
} 

, 당신은 프로필 기능 또는 데이터, 사용 중 하나가 될 수 있도록 수 :

var profile = event.data.profile; 
if (typeof profile == "function") { 
    profile = profile(); 
}