0
Answered
AlexDr 6 months ago in iRidium Script • updated by S1210 6 months ago 12

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

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


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


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


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


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

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

Привет. Создайте скрипт. Добавьте в скрипт слушатель, который будет срабатывать по событию (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
Answered

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

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


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


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