2012-12-20 21 views
6

Başka bir işleve devam etmek istediğim bir mutedUser değişkenim var. Tıklama etkinliğinin dışında kalan değişkenle ilgili biraz sorun yaşıyorum. Buna sahip olmanın en iyi yolu, "return mutedUser" ifadesinin, "iftar" dizesinin eklenmesini, if ifadesinin karşılanma koşullarına göre sürdürmesini sağlayacak şekilde nasıl olurdu? Teşekkürler! PersistanceJavascript ile Değişken Kapsam İçindekiler

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

olduğunu değil boş ve çalışma kimliği için kontrol deyimi olur? Ayrıca bunu yapabilir ve sonucu kaydedebilirsiniz: console.log (mutedUser + 'muted1'); –

cevap

5

geçmektir:

// 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; 
}; 

kod mutedUsers dizisini korur ve isUserMuted işlevi, sağlanan dizinin bu dizide olup olmadığını denetler.

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

Bu harika çalıştı, ancak this.isUserMuted işlevinin kapsamında "chatUserID" değişkenine ihtiyacım var. Bunun nedeni, bu değişkenin, – Yasir

+0

içinde yüklenen HTML içindeki bir özniteliği denetleyen bir tıklama olayına dayandığıdır. Uygulamanızda, "chatUserID", kullanıcı gerçekten susturulmuşsa (ücretliyse) statement - 'if (mutedUsers [chatUserID]! == null && mutedUsers [chatUserID] .id === payload.a)' ve bu satır 'mutedUsers [chatUserID] .id = chatUserID;' tıklama işleyicisinin içinde) –

+0

ah! Bu bir kez işe yaradı! = vs! == Yardımlarınız için teşekkürler! – Yasir

3

Düzenleme

Maalesef hatamı durur nerede

* console.log en beni görmek için kontrol edildi. Bir başka yolu sana (kod bakarak) yapmaya çalıştığımız şey anlamış, bu en iyi yaklaşım olacağını yani bu değişkende

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

Aslında orijinal versiyonunuz daha iyiydi. Yeni sürüm çalışmıyor. –

+0

Doğru olanı biliyorsun. Ama normalde bunu bir modül modeli olarak görüyorum, örneğin http://jsfiddle.net/VpAPP/ – redconservatory

+1

gibi bir şey Sadece bir nesneyi döndürdüğünüzde çalışır, bir skaler değil. –

2

Yapamazsınız: Verdiğiniz kodunda, her zaman isUserMuted işlev denir yeni bir olay işleyicisi ..

isUserMuted işlevi bile kısaltılmış olabilir eklemek olacaktır. Bir dizeyi işlevden döndürürseniz, her zaman değer olarak geçirilir, yani kopyalanır; ve bu değer artık değişmeyecek. Yerel değişkenin geçerli değerine erişebilen bir işlevi veya değişmekte olan bir özelliği olan bir nesneyi döndürmeniz gerekir. Zaten bir nesne var gibi

, opsiyon 2. buraya tam uyacak:

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' : ''; 
    } 
}