2017-01-03 8 views
-1

Я пишу пакет для редактора Atom, используя Coffeescript.В Atom, модуль не определен с использованием обещаний и функций

Мой пример кода:

module.exports = 
 
class DeclarationTree 
 

 
    createIndexModules: (files, length) => 
 
    @modules = new Map() 
 
    ... 
 
    
 
    onClic = (text) => 
 
    # PROBLEM **@modules** IS UNDEFINED 
 
    file_array = @modules.get(text) 
 
    console.log file_array 
 
    console.log file_array[0], file_array[1] 
 

 
    getProvider: -> 
 
    providerName: 'hyperclick-provider', 
 
    # getSuggestionForWord gives me a promise 
 
    getSuggestionForWord: (editor, text, range) -> 
 
     range: range, callback: -> 
 
      onClic(text)

Конечно, @modules определяется перед вызовом onClic().

Я не знаю, как его решить, я довольно новичок в Javascript.

Похоже onClic с =() определяет метод незамещаемых класса и не может получить доступ к @module (this.module)

Как получить доступ к переменной, которую я создал в методе класса внутри функции обратного вызова в обещании?

Спасибо!

Edit: Использование двоеточие: Спасибо за -1;)

module.exports = 
 
class DeclarationTree 
 

 
    createIndexModules: (files, length) => 
 
    @modules = new Map() 
 
    console.log this.constructor.name # DeclarationTree 
 
    ... 
 
    
 
    onClic: (text) => 
 
    # PROBLEM **@modules** IS UNDEFINED 
 
    file_array = @modules.get(text) 
 
    console.log file_array 
 
    console.log file_array[0], file_array[1] 
 

 
    getProvider: -> 
 
    providerName: 'hyperclick-provider', 
 
    # getSuggestionForWord gives me a promise 
 
    getSuggestionForWord: (editor, text, range) -> 
 
     range: range, callback: -> 
 
      console.log this.constructor.name # Object 
 
      @onClic(text)

Получить Uncaught TypeError: this.onClic is not a function ошибку.

Очевидно, что я не могу получить доступ ко всему, что связано с объектом this в функции callback.

ответ

0

Это может быть так же просто, как использование двоеточия после onClic вместо знака равенства. Это то, что вы хотели сделать?

В настоящее время coffeescript просто пишет выражение функции в этой области объявления класса, поэтому он не имеет доступа к @/this.

EDIT

Вы пытаетесь использовать this из контекста. Вам нужно привязать функцию к области, которую вы хотите ссылаться. В coffeescript вы можете сделать это легко с помощью функции толстой стрелки.

+0

Спасибо, я пробовал раньше, но получаю сообщение об ошибке, я думаю, что не могу получить доступ к чему-либо, связанному с объектом. (Я отредактировал мой вопрос) –

+0

хорошо, я попробую то, что вы сказали, спасибо. –

 Смежные вопросы

  • Нет связанных вопросов^_^