2012-12-20 6 views
6

다른 기능을 유지하고 싶은 mutedUser 변수가 있습니다. 나는 click 이벤트 외부에서 지속되는 변수에 약간의 문제가 있습니다. "return mutedUser"가 if 문이 충족되는 조건에 따라 "음소거 된"문자열 추가를 유지하도록하는 가장 좋은 방법은 무엇입니까? 감사! 지속성이자바 스크립트 변수 범위 문제

this.isUserMuted = function isUserMuted(payload) { 
    var mutedUser = ''; 
    // If mute button is clicked place them into muted users list 
    // check for duplicates in list 
    $("#messages-wrapper").off('click', '.message button.muteButton'); 
    $("#messages-wrapper").on('click', '.message button.muteButton', function(e) { 

     $('#unMute').show(); 

     //create userId reference variable 
     var chatUserID = parseInt($(this).parent().parent().attr("data-type")); 

     //store userId in muted user object 
     mutedUsers[chatUserID] = {}; 
     mutedUsers[chatUserID].id = chatUserID; 
     mutedUsers[chatUserID].muted = true; 

     if (mutedUsers[chatUserID] !== null && mutedUsers[chatUserID].id === payload.a) { 
      console.log("user is now muted"); 
      mutedUser += ' muted'; 
      console.log(mutedUser + 1); 
     } 
     console.log(mutedUser + 2); 
    }); 
    return mutedUser; 
}; 
+0

인 당신이 NOT NULL 및 작업 ID를 확인 if 문? 게다가이 작업을 수행하고 결과를 게시 할 수 있습니다 : console.log (mutedUser + 'muted1'); –

답변

5

를 전달하는 것입니다 :

// If mute button is clicked place them into muted users list 
// check for duplicates in list 
$("#messages-wrapper").off('click', '.message button.muteButton'); 
$("#messages-wrapper").on('click', '.message button.muteButton', function(e) { 
    $('#unMute').show(); 

    //create userId reference variable 
    var chatUserID = parseInt($(this).parent().parent().attr("data-type")); 

    //store userId in muted user object 
    mutedUsers[chatUserID] = {}; 
    mutedUsers[chatUserID].id = chatUserID; 
    mutedUsers[chatUserID].muted = true; 
}); 

this.isUserMuted = function isUserMuted(payload) { 
    var mutedUser = ''; 

    if (mutedUsers[payload.a] !== null) { 
     mutedUser += ' muted'; 
    } 

    return mutedUser; 
}; 

코드는 mutedUsers 배열을 유지하고 제공된 사용자가 해당 배열에 있으면 isUserMuted 함수 검사를 유지합니다.

this.isUserMuted = function isUserMuted(payload) { 
    return mutedUsers[payload.a] !== null ? ' muted' : ''; 
}; 
+0

이 코드는 효과적 이었지만 this.isUserMuted 함수의 범위에 "chatUserID"변수가 필요합니다. 이는 해당 변수가 HTML 내에서로드 된 속성을 검사하는 클릭 이벤트에 기반하기 때문입니다. – Yasir

+0

구현시 사용자가 실제로 음소거되어 있으면'chatUserID'는'payload.a'와 실질적으로 동일합니다 (if (mutedUsers [chatUserID]! == null && mutedUsers [chatUserID] .id === payload.a)'및이 줄'mutedUsers [chatUserID] .id = chatUserID;'클릭 핸들러 내) –

+0

아! 이 작업을 한 번 해보았습니다! = 대! == 도움 주셔서 감사합니다! – Yasir

3

편집

죄송합니다, 내 실수를 정지 곳

* CONSOLE.LOG 년대 나를보고 확인되었다. 또 다른 방법은 당신이 (코드를보고) 뭘 하려는지 이해하면,이 최선의 방법이 될 것입니다 즉, 그 변수에

this.isUserMuted = function isUserMuted(payload, isMuted) { 
    isMuted = ''; 
    // If mute button is clicked place them into muted users list 
    // check for duplicates in list 
    $("#messages-wrapper").off('click', '.message button.muteButton'); 
    $("#messages-wrapper").on('click', '.message button.muteButton', function(e) { 

     $('#unMute').show(); 

     //create userId reference variable 
     var chatUserID = parseInt($(this).parent().parent().attr("data-type")); 

     //store userId in muted user object 
     mutedUsers[chatUserID] = {}; 
     mutedUsers[chatUserID].id = chatUserID; 
     mutedUsers[chatUserID].muted = true; 

     if (mutedUsers[chatUserID] !== null && mutedUsers[chatUserID].id === payload.a) { 
      console.log("user is now muted"); 
      isMuted += ' muted'; 
      console.log(mutedUser + 1); 
     } 
     console.log(mutedUser + 2); 
    }); 
    return isMuted; 
}; 
+0

사실 원래 버전이 더 좋았습니다. 새 버전이 작동하지 않습니다. –

+0

당신은 당신이 옳은 것을 압니다. 하지만 저는 이것을 보통 모듈 패턴, 즉 http://jsfiddle.net/VpAPP/ – redconservatory

+1

과 같이 보았습니다. 스칼라가 아닌 객체를 반환하는 경우에만 작동합니다. –

2

당신은 할 수 없습니다 : 사용자가 제공 한 코드에서 때마다 isUserMuted 함수가 호출 될 때 새로운 이벤트 핸들러 ..

isUserMuted 기능도 단축 할 수 첨부합니다. 함수에서 문자열을 반환하면 항상 값으로 전달됩니다 (예 : 복사 됨). 가치가 더 이상 변하지 않을 것입니다. 로컬 변수의 현재 값에 액세스 할 수있는 함수 또는 변경중인 속성이있는 객체를 반환해야합니다. 이미 객체를 갖고있는 것 같다으로

, 옵션 # 2도 여기에 맞는 :

function User() { // or whatever you have 
    … 

    var user = this; 
    // If mute button is clicked place them into muted users list 
    // check for duplicates in list 
    $("#messages-wrapper").on('click', '.message button.muteButton', function(e) { 

     $('#unMute').show(); 

     //store userId in muted user object 
     mutedUsers[user.id] = user; 
     user.muted = true; 
    }); 
    this.muted = false; 
    this.isUserMuted = function() { 
     return this.muted ? ' muted' : ''; 
    } 
}