0
Answered

Листенер для нескольких элементов

S1210 7 years ago in Tips and Tricks updated by Andrey S 4 years ago 4

Добрый день. Возникла в процессе работы необходимость, сохранять имя кнопки в переменную для дальнейшего использования при нажатии на нее. Но хочется иметь не 10 одинаковых листенеров а один единый для всего. Вот пример кода:


var Name1;

IR.AddListener(IR.EVENT_ITEM_PRESS, IR.GetPopup("Popup_1").GetItem("Item 3"), function ( )
{
Name1 = IR.GetItem("Popup_2").Name;
});
IR.AddListener(IR.EVENT_ITEM_PRESS, IR.GetPopup("Popup_1").GetItem("Item 5"), function ( )
{
Name1 = IR.GetItem("Popup_3").Name;
});


Как бы это можно было оптимизировать?

+1
  1. Через "глобальный слушатель" http://support.iridiummobile.net/topics/11534-/#comment-70822
  2. Еще мне понравилось простое решение:
    http://support.iridiummobile.net/topics/11423-js-pass-objectgetitem-in-script-call/#comment-70159
    - "передача" параметра функции через Send to Project Token, т.е. можно добавлять "ручками" в редакторе
  3. "Нелепое" решение - передача параметров через URL http://wiki2.iridiummobile.net/Template:URL-scheme iridium://script?data1&data2 в эмуляторе не работает

1+2 -> 4 "Send Text" to eval

IR.AddListener(IR.EVENT_START,0,function()
{
IR.SubscribeTagChange("Global._eval");
});
IR.SetGlobalListener(IR.EVENT_GLOBAL_TAG_CHANGE, function(name, value)
{
switch (name)
{
case 'Global._eval':
if (value!='')
{
eval (value);
IR.SetVariable("Global._eval",'');
}
break;
default:
//
break;
}
});
function a (b,c){
IR.Log(b+c);
}

ScriptCall macro.When calling the function the reference to the item which called the function is transferred in the script

https://support.iridiummobile.net/communities/5/topics/13832-sender-in-scriptcall-macro