如何在Meteor方法中获取this.userId

时间:2015-06-01 14:27:33

标签: javascript methods meteor

我需要为每个登录的用户调用几次函数,但是当函数放在meteor方法中时,this.userId在函数范围内变为未定义,这里是例子:

myMethod: function(){

  console.log(this.userId); // this returns proper userId

  function innerFunction(){
    console.log(this.userId); // this returns undefined
  };
  innerFunction();

}

如何在函数中传递this.userId? 函数是否必须与Meteor.bindEnvironment绑定?

3 个答案:

答案 0 :(得分:2)

您有一些变体可以解决此问题:

  • 使用.bind()方法:

    myMethod: function () {
     console.log(this.userId); // this returns proper userId
    
     function innerFunction() {
         console.log(this.userId); // this returns undefined
     }
    
     innerFunction.bind(this);
    }
    
  • 使用.apply()方法将正确的this应用到函数中:

    myMethod: function () {
     console.log(this.userId); // this returns proper userId
    
     function innerFunction() {
         console.log(this.userId); // this returns undefined
     };
    
     innerFunction.apply(this);
    }
    
  • 您也可以使用that this innerFunction的{​​{1}}来将范围传递到myMethod: function () { var that = this; console.log(this.userId); // this returns proper userId function innerFunction() { console.log(that.userId); // this returns undefined } innerFunction(); }

    innerFunction
  • 或者只是将userId传递给myMethod: function () { var userId = this.userId; console.log(this.userId); // this returns proper userId function innerFunction(userId) { console.log(userId); // this returns undefined } innerFunction(); }

    make re

答案 1 :(得分:1)

有几种方法可以做到:

myMethod: function () {
    var me = this;

    function innerFunction () {
        console.log(me.userId);
    };

    innerFunction();
}

myMethod: function () {
    var innerFunction = function () {
        console.log(this.userId);
    }.bind(this);

    innerFunction();
}

答案 2 :(得分:0)

你试过绑定这个函数吗?

   myMethod: function(){

      console.log(this.userId); // this returns proper userId


  function innerFunction(){
    console.log(this.userId); // this returns undefined
  }.bind(this);
  innerFunction();

}