0
Beantwoord

Как передать имя элемента панельного проекта в скрипт?

AlexDr 8 jaar geleden in iRidium Script bijgewerkt door Andrey S 5 jaar geleden 13

Как можно передать в скрипт имя элемента по которому был произведен клик?

Хотелось бы чтоб это был один из параметров передаваемых в вызываемой функции. Сейчас похоже там вообще никакие параметры не передаются и не используются.


Я пробовал делать так:

Image 17224


Обрабатывая в скрипте тег проекта UnderItemNameShowPopUp - он имел значение undefended.


и еще, подскажите где почитать что именно можно передать в переменную используя выделенные (да и некоторые не выделенные тоже) свойства элемента UI:

Image 17225


Если ответа нет - переквалифицирую вопрос в предложение добавить такую возможность.

Ведь в серверной части проекта есть возможность узнать из какого тега вызвана скриптовая процедура. Очень помогло бы в панельном проекте в написании скриптов.

Привет. Создайте скрипт. Добавьте в скрипт слушатель, который будет срабатывать по событию (press, release...). Используйте this, чтоб передавать имя нажатого элемента (например, в переменную, токен...).


IR.AddListener(IR.EVENT_ITEM_PRESS,

IR.GetPage("Any_Page").GetItem("Any_Item"), Item_Press, IR.GetPage("Any_Page").GetItem("Any_Item"));


function Item_Press()

{

IR.Log(this.Name);
};

Удачи.

+1
var item,i=0;

IR.Log("ItemsCount: " + IR.GetItem("Page 1").ItemsCount);


while (item=IR.GetItem("Page 1").GetItem(i)){
   IR.AddListener(IR.EVENT_ITEM_PRESS, item, Item_Press, item);
   i++;
}




function Item_Press(){
   IR.Log("Name: " + this.Name + " Type: " + this.Type);   
}

IR.AddListener(IR.EVENT_START, 0 , RegisterButton);


var gRegistersItem = [
{item: IR.GetItem("Page 1").GetItem("Item 1")},
{item: IR.GetItem("Page 1").GetItem("Item 2")},
{item: IR.GetItem("Page 1").GetItem("Item 3")}
];
function RegisterButton()
{
for(var i = 0; i < gRegistersItem.length; i++)
{
var item = gRegistersItem[i].item;
IR.AddListener(IR.EVENT_ITEM_PRESS, item, ButtonPress, item);
IR.AddListener(IR.EVENT_ITEM_RELEASE, item, ButtonRealese, item);
}
};
function ButtonPress(){
IR.Log("Name: " + this.Name);
};

function ButtonRealese(){


IR.Log("Name: " + this.Name);
};
+1
Under review
Такой скрипт перестанет работать по достижению 1024 элементов. Именно таково максимальное количество слушателей в проекте.

Хотелось бы получить возможность передавая в токен проекта свойство this или свойство this в качестве параметра функции через Script Call иметь возможность вытянуть из него все необходимые свойства элемента интерфейса.

+1

Это возможно, и даже запланировано, но передавать ссылку на объект будем не как параметр, а как контекст выполнения функции.

Для этого потребуются серьезные внутренние доработки приложения, поэтому сроки так же не сообщаем.

ясно. спасибо за пояснения. пока будем колхозить по старинке)

IR.AddListener(IR.EVENT_START,0,function()
{
IR.SetGlobalListener(IR.EVENT_GLOBAL_TAG_CHANGE, function(name, value)
{
     IR.Log("Global Listener Activated: " + name + "\tValue: " + value);
});

var item,i=0;
var obj  = IR.GetItem("Page 1").GetItem("Item 1")

for (;i<1500;i++){
    item=obj.Clone("button_"+i);
    item.X=obj.X+i/3;
    item.Y=obj.Y+i/3;
    IR.SubscribeTagChange("UI.Page 1."+item.Name+".Value");  
}
});

С глобальным слушателем - да, работать будет. Спасибо за пример!

То есть если у меня большой проект, скажем из 2000 кнопок по нажатию на каждую из которых происходит какое-то действие, то он у меня работать не будет? Я правильно понимаю?

+1
Beantwoord

Сейчас такого способа нет.

Планируем добавить слушатель, позволяющий определить, на какой элемент нажал пользователь (точку касания и дополнительные свойства). По срокам пока рано ориентировать.


Свойство This графического элемента позволяет сослаться на него, как на объект, но доступно для использования только на уровне драйвера AMX, это наследуемый функционал.
Свойства элемента, доступные из скрипта, можно увидеть здесь: http://dev.iridiummobile.net/GUI_API/en#Item


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

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