Я хочу вызвать из области Jquery (которая находится в том же классе) к той же функции класса / метода. Как я должен сделать?

Я устал:

displayTemplate.findWithAttr (действие ) ;

Или

this.findWithAttr (действие ) ;

Ответ

"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
evarc 30 Май 2019 в 15:53

2 ответа

Лучший ответ

Прежде чем войти в область действия 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
FeaturedSpace 30 Май 2019 в 13:01

Вы можете использовать лямбда-выражения вместо вложенных функций. Одно из различий между ними заключается в том, что лямбда-выражения сохраняют родительский контекст, а не имеют собственный.

Так что для этого вы просто измените

"yes": function() {

Кому

"yes": () => {
0
Farkhad Gojazadeh 30 Май 2019 в 13:15