使用 Appcelerator Alloy 动态定位 UI 元素?

Targeting UI elements dynamically with Appcelerator Alloy?

有没有办法通过传递变量来定位特定的alloyUI元素?我想像这样传递一个变量:

controller.js

var flag = "se";
changeBackground(flag); //should change the background color of ImagView of the se flag


function changeBackground(elementToChange){
    elementToChange.backgroundColor = "red"; //does not work
   $. + elementToChange +  backgroundColor = "red"; //does not work
}

view.xml

<View id="flagRow" layout="horizontal" backgroundColor="blue" height="Ti.UI.SIZE">
    <ImageView id="se" height="20dp" left="5dp" image="/images/flags/se.png" onClick="downloadPastLanguageLevels"/>
    <ImageView id="de" height="20dp" left="10dp" image="/images/flags/de.png" onClick="downloadPastLanguageLevels"/>
    <ImageView id="en" height="20dp" left="10dp" image="/images/flags/en.png" onClick="downloadPastLanguageLevels"/>
            </View>

现在我正在遍历 $.flagRow。容器,但我更想知道如何直接设置标志。

var i, view;
    for (i in $.flagRow.children) {
            view = $.flagRow.children[i];
            if (view.id.indexOf(flag) > -1) { 
                view.backgroundColor = "red";
            } else {
                view.backgroundColor = "transparent";
            }
        }

您可以使用 $.id 从控制器引用视图中的元素,因此如果您有一个名为 "myButton" 的元素,您可以将其引用为 $.myButton。如果您将名称作为变量传递给需要名为 "element" 的参数的函数,那么您会将其作为 $[element] 进行寻址,其中 element 是表示 id 的字符串,因此在本例中为 "myButton"。

在您的情况下,将代码更改为引用 $[elementToChange] 应该可以。