Решение недоступной переменной внутри анонимной функции jquery .bind (), используя жизненный цикл реакции - PullRequest
0 голосов
/ 31 августа 2018

Мне нужен доступ к переменной jqconsole вне анонимно связанной функции. Как я могу создать его вне среды обитания JQuery? Если возможно, я бы просто сохранил это глобально или в моем состоянии. Мне не удалось заставить его работать таким образом.

  componentDidMount = () => {
    // Execute after fully loaded
    $(window).bind('load', () => {
      const jqconsole = $('#console').jqconsole(
        'Welcome to the console!\n',
        '>'
      );
      // register some workarounds
      jqconsole.RegisterMatching('{', '}', 'brace');
      jqconsole.RegisterMatching('(', ')', 'paran');
      jqconsole.RegisterMatching('[', ']', 'bracket');

      const startPrompt = () => {
        // scroll to bottom -- NOT WORKING YET
        $('#console').scrollTop($('#console')[0].scrollHeight);
        // Start the prompt with history enabled.
        jqconsole.Prompt(true, input => {
          let transformedString;
          // Manage Output
          try {
            transformedString = window.eval(input);
            if (typeof transformedString === 'object') {
              this.writeToConsole(jqconsole, 'object', transformedString);
            } else {
              this.writeToConsole(jqconsole, 'message', transformedString);
            }

            // Restart the input prompt.
            startPrompt();
          } catch (error) {
            this.writeToConsole(jqconsole, 'error', error);
            // Restart the input prompt.
            startPrompt();
          }
        });
      };
      // Restart the input prompt.
      startPrompt();
    });
  };

Если быть точным: у меня есть метод класса writeToConsole, и я хочу вызвать его без необходимости доставки экземпляра jqconsole:

  // Manage Output
  writeToConsole = (jqconsole, type, message) => {
    console.log('writing to console @ console');
    if (type === 'error') {
      jqconsole.Write(message + '\n', 'jqconsole-output-error');
    } else if (type === 'message') {
      jqconsole.Write(message + '\n', 'jqconsole-output');
    } else if (type === 'object') {
      jqconsole.Write(JSON.stringify(message) + '\n', 'jqconsole-output');
    } else {
      console.log('error @ writeToConsole');
      return null;
    }
  };

Спасибо за ваше время и помощь.

1 Ответ

0 голосов
/ 31 августа 2018

Я решил свой собственный вопрос, создав экземпляр моего jqconsole до this.myConsole в конструкторе. Таким образом, он доступен во всем компоненте.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...