2015-12-22 77 views
-1

我將應用程序切換到RequireJS。RequireJS並在模塊中使用this.id?

在我的應用程序中,我檢測到用戶點擊某個具有特定類的元素時。

我使用click事件和this.id來獲取元素的唯一ID。

現在我已經將這個函數移動到了Require模塊,我只爲this.id返回'undefined'。

我猜這個模塊沒有一個參考,這個函數被調用時被點擊了什麼。

我也似乎無法通過this.id模塊。

'使用關鍵字作爲標識符是無效'。

那麼,如何獲得點擊元素的唯一ID?

$(document).on('click', '.userSelect', function (myID) { 

    var retConvo = getConvoID.convoData(); 
    convoID = retConvo.convo; 
    isGroup = retConvo.group; 
    console.log("Conversation ID is: " + convoID + " and IsGroup: " + isGroup); 
}); 

這裏是模塊代碼它調用。

define(function() { 

    return { 
    convoData: function(myID) { 
     var userSelected = this.id; 
     console.log('User Selected ID is: ' + userSelected); 
     if (userSelected == myID) { 
     alert("You can't message yourself."); 
     return false; 
     } else { 
     console.log("Selected User ID is: " + this.id); 
     // change background to show user is selected. 
     $("div.userSelected").removeClass("userSelected"); 
     $(this).addClass("userSelected"); 
     convoID = this.id; 
     isGroup = 'N'; 
     console.log("emitting convo users id: " + convoID); 
     return { 
      convo: convoID, 
      group: isGroup 
     }; 
     } 
    } 
    } 
}); 

因此,當它到達上面的this.id時,它是未定義的。當它全部在一個js文件中時工作得很好。

感謝您的任何幫助和指針。

回答

2

幾件事情:

  1. 它似乎並不像你傳遞myIDconvoData功能
  2. this在功能指的是本地this。如果您希望它指向單擊元素,請將元素作爲參數傳遞給函數,或者在函數調用時將其綁定到:var retConvo = getConvoID.convoData(myId).bind(this); 或者,var retConvo = getConvoID.convoData(myId, this);然後將convoData更改爲function(myID, element)並參考element.id;
  3. 在代碼中使用===而不是== - 對此問題本身沒有影響,但會幫助您避免出現問題。
+0

很好的回答!謝謝。我在看似簡單的事情上絆倒自己。 –