определить функцию со строкой, но не выполнять ее (без eval и т. д., например, include, require) - PullRequest
0 голосов
/ 18 сентября 2018

Я бы хотел попросить вас о помощи, потому что я в тупике ...

Я использую редактор скриптов google sheet и пытаюсь создать собственное меню с пользовательскими функциями. Однако я хочу создать библиотеку, которая может быть подключена к другим листам для других пользователей, и она будет обновляться автоматически при создании новой версии. Проблема начинается, когда я хочу определить ее как «пользовательскую функцию» для меню.

var ui = SpreadsheetApp.getUi();
    ui.createMenu('Custom Menu')
      .addSubMenu(
        ui.createMenu('clipboard')
          .addItem('copy', 'menuItem1')
          .addItem('paste', 'menuItem2')
      )
      .addToUi();



function menuItem1(){
  bla,bla,bla
}
function menuItem2(){
  bla,bla,bla
}

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

ui.createMenu('Custom Menu')
      .addSubMenu(
        ui.createMenu('clipboard')
          .addItem('copy', 'menuItem1')
          .addItem('paste', 'menuItem2')
      )
      .addSeparator()
      .addSubMenu(
        ui.createMenu('merge')
          .addItem('merge', 'menuItem3')
          .addItem('unmerge', 'menuItem4')
      )
      .addToUi();


function menuItem1(){
  bla,bla,bla
}
function menuItem2(){
  bla,bla,bla
}
function menuItem3(){
  bla,bla,bla
}
function menuItem4(){
  bla,bla,bla
}

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

ml = MyLibrary then ml.menuItem1.

Я должен использовать только

menuItem1, а не ml.menuItem1

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

function listOfFunctions(){
  var functionString1 = "function menuItem1(){ blablabla }";

  var functionString2 = "function menuItem1(){ blablabla }";
    return functionString1 + functionString2;
}

затем как-то разобрать это:

function menuItem1(){ blablabla };

и затем выполните его, когда я захочу.

menuItem1() или menuItem2()

Если я выполню эту строку через eval (), функция будет выполнена, и я просто хочу ее определить. Я могу выполнить его позже с помощью триггеров.

ооооо, вы думаете о любой помощи, пожалуйста ???

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