Bridge Talk: как передать и запустить существующую функцию

Статус
Закрыто для дальнейших ответов.

dumbm1

Участник
Топикстартер
Сообщения
385
Оценка реакций
166
В конкретном примере ниже,
как передать и запустить через Bridge Talk существующую ф-цию f2,
не переписывая явно код функции f2 в строку,
чтобы обработчик на button2 сработал аналогично обработчику на button1?

Код:
//@target illustrator
//@targetengine "session"

function f2 () { return ( selection[ 0 ])}

var w = new Window ( 'palette', '' ),
button1 = w.add ( 'button', undefined, '#1' ),
button2 = w.add ( 'button', undefined, '#2' );

button1.onClick = function () {
  var bt = new BridgeTalk ();
  bt.target = "illustrator";
  bt.body = "function f1 () { return ( selection[ 0 ])}; alert ( f1 () );";
  bt.send ();
}

button2.onClick = function () {
  var bt = new BridgeTalk ();
  bt.target = "illustrator";
  bt.body = "как передать сюда и запустить ф-цию f2?"
  bt.send ();
}
w.show ();
 

splxgf

10 лет на форуме
Сообщения
6 852
Оценка реакций
3 042
В скриптах не разбираюсь, но разве не
Код:
bt.body = f2();
и может добавить точку с запятой, хотя скорее всего ее можно опускать, но это плохая примета.
Код:
function f2 () { return ( selection[ 0 ]);}
 

dumbm1

Участник
Топикстартер
Сообщения
385
Оценка реакций
166
На адобовском форуме нашёл обсуждение и ссылку (в последнем посте) на примеры ф-ций.
В первом примере вроде бы нашёл ответ на свой вопрос - вот так работает:
Код с оформлением (BB-коды):
button2.onClick = function () {
  var bt = new BridgeTalk ();
  bt.target = "illustrator";

  var f = f2.toString ();
  f += "f2();";
  bt.body = f;

  bt.send ();
}
@splxgf, да, точка с запятой не критична, но нужна - это хороший стиль (особенно, если бы я ф-цию как положено написал, а не в одну строку)
 
Последнее редактирование:

dumbm1

Участник
Топикстартер
Сообщения
385
Оценка реакций
166
ещё проще:
Код:
bt.body = f2.toString () + ";" + "f2();";
 

dumbm1

Участник
Топикстартер
Сообщения
385
Оценка реакций
166
При этом, если ф-ция f2 вызывает какую-то ф-цию _f() из кода, то к строке надо добавлять и её:
Код с оформлением (BB-коды):
bt.body = f2.toString () + ";" + _f().toString () + ";" +"f2();";
 

dumbm1

Участник
Топикстартер
Сообщения
385
Оценка реакций
166
Зачем это всё надо:
1. Bridge Talk для обработчиков событий в palette.
2. Передавать в Bridge Talk лучше готовую ф-цию, т.к. её гораздо удобнее потом редактировать, чем строку.
Если можно проще, то подскажите, как ;)
 
Последнее редактирование:

Skvoznyak

12 лет на форуме
Сообщения
4 060
Оценка реакций
1 674
Код:
var w = new Window ( 'palette', '' ),
button1 = w.add ( 'button', undefined, '#1' ),
button2 = w.add ( 'button', undefined, '#2' );

button1.onClick = function () {
return ( selection[ 0 ]);
}

button2.onClick = function () {
return ( selection[ 0 ]);
}
w.show ();
а чем такой вариант не нравится?
 

dumbm1

Участник
Топикстартер
Сообщения
385
Оценка реакций
166
Это правильный вариант, но
либо я что-то сильно не понимаю, либо у меня этот вариант не работает.
(Win8.1x64rus Illustrator CC-2014 и CS-4)
Иначе, зачем все эти извращения с Bridge Talk?
@Skvoznyak, а если замените return на alert, что выводит alert?

ps. реальный скрипт, конечно же, немного сложнее, с обращением к различным переменным и ф-циям скрипта и к объектам активного документа
 
Последнее редактирование:

Skvoznyak

12 лет на форуме
Сообщения
4 060
Оценка реакций
1 674
а, ну да, selection не видит.

насколько я помню, можно скрипт целиком через bridgetalk вызвать, а не каждый обработчик отдельно
 

dumbm1

Участник
Топикстартер
Сообщения
385
Оценка реакций
166
ок, попробую, а пример есть какой-нибудь?
 

qsedftghk

фея
12 лет на форуме
Сообщения
1 543
Оценка реакций
774
вызвать скрипт, который в другом файле, как-то так, например
Код:
but.onClick=function()
{
pt=app.path+"/Presets/en_US/Scripts/мой_скрипт.js";
main(pt);
}

function main(put)
{
file = new File(put);
file.open('r');
result = file.read();
file.close();

bt = new BridgeTalk;
bt.target = 'illustrator';
result=result.replace(/(\\\s)/g, " ");
bt.body = result;
bt.send();
}
 
Статус
Закрыто для дальнейших ответов.