RequireJS并在模块中使用this.id?

时间:2015-12-22 16:34:01

标签: javascript jquery requirejs

我正在将应用切换到RequireJS。

在我的应用中,我会检测用户何时点击具有某个类的元素。

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

既然我已经将此功能移动到了需要的模块,我只能得到“未定义的”#39;回到这个。

我猜测模块在调用函数时没有对所点击内容的引用。

我似乎也无法将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文件中时工作得很好。

感谢您的帮助和指示。

1 个答案:

答案 0 :(得分:2)

有几件事:

  1. 您似乎没有将myID传递给convoData函数
  2. 函数中的
  3. this指的是本地this。如果你想要它引用被点击的元素,要么将元素作为参数传递给函数,要么在函数调用时绑定它:var retConvo = getConvoID.convoData(myId).bind(this); 或者,var retConvo = getConvoID.convoData(myId, this);然后将convoData更改为function(myID, element)并参阅element.id;
  4. 在代码中使用===代替== - 与此问题无关,但可以帮助您避免出现问题。