从jQuery范围调用到类函数

时间:2019-05-30 12:53:05

标签: javascript es6-class

我想从Jquery范围(在同一类中)调用相同的类函数/方法。我该怎么办?

我尝试过:

  

displayTemplate.findWithAttr(action);

  

this.findWithAttr(action);

响应

  

“ this.findWithAttr不是函数”

这是我的代码。

class displayTemplate{
  findWithAttr(action) {
    //to do something with action
  }
  router(action){
    if(action == "something"){
      $( "#confirm_dialog_msg" ).text("text?");
         $( "#dialog-confirm" ).dialog({
           buttons: {
             "yes": function() {
                $( this ).dialog( "close" );

               //how in this area call to "findWithAttr" function above?
                this.findWithAttr(action);

             },
             "No": function() {
               //..
             }
           }
        });
      }
  //...
  }
}

2 个答案:

答案 0 :(得分:1)

在进入函数的JQuery范围之前,先声明一个这样的变量

var self = this;

然后只需执行self.findWithAttr,那应该可以工作。

类似:

router(action){
if(action == "something"){
  var self = this;
  $( "#confirm_dialog_msg" ).text("text?");
     $( "#dialog-confirm" ).dialog({
       buttons: {
         "yes": function() {
            $( this ).dialog( "close" );

           //how in this area call to "findWithAttr" function above?
            self.findWithAttr(action);

         },
         "No": function() {
           //..
         }
       }
    });
  }

希望这会有所帮助。

答案 1 :(得分:0)

您可能要使用lambda表达式而不是嵌套函数。 它们之间的区别之一是lambda表达式保留父上下文而不是拥有自己的上下文。

为此,您只需更改

"yes": function() {

"yes": () => {