2012-12-20 21 views
6

के साथ समस्या मेरे पास एक परिवर्तनीय म्यूट यूज़र है जिसे मैं किसी अन्य फ़ंक्शन पर कायम रखना चाहता हूं। मुझे क्लिक ईवेंट के बाहर मौजूद चर के साथ कुछ परेशानी हो रही है। यह सुनिश्चित करने का सबसे अच्छा तरीका क्या होगा कि "वापसी म्यूट यूज़र" अगर कथन की शर्तों के आधार पर "म्यूट" स्ट्रिंग अतिरिक्त रखेगा? धन्यवाद!जावास्क्रिप्ट वैरिएबल स्कोप

* console.log के मुझे देखने के लिए जाँच कर रहे थे जहां दृढ़ता बंद हो जाता है

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

है अगर बयान जहां नहीं बातिल और आईडी काम करने के लिए जाँच? इसके अलावा आप यह कर सकते हैं और परिणाम पोस्ट कर सकते हैं: 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

की सराहना करें यह बहुत अच्छा काम करेगा, हालांकि मुझे इस .isUserMuted फ़ंक्शन के दायरे में "chatUserID" चर की आवश्यकता है। ऐसा इसलिए है क्योंकि, वेरिएबल एक क्लिक इवेंट पर आधारित है जो HTML के भीतर एक विशेषता की जांच करता है जो – Yasir

+0

में लोड हो जाता है आपके कार्यान्वयन में, 'chatUserID' प्रभावी रूप से' payload.a' के बराबर होता है यदि उपयोगकर्ता वास्तव में म्यूट हो जाता है (आपके द्वारा निर्णय लिया जाता है) कथन - 'अगर (muteUsers [chatUserID]! == null && mutedUsers [chatUserID] .id === payload.a)' और यह पंक्ति 'mutedUsers [chatUserID] .id = chatUserID;' क्लिक हैंडलर के अंदर) –

+0

आह! यह एक बार मैंने इसे सेट करने के लिए काम किया! = बनाम! == आपकी मदद के लिए धन्यवाद! – Yasir

3

संपादित

क्षमा करें, मेरी गलती। एक और तरीका है

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' : ''; 
    } 
} 
संबंधित मुद्दे