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

时间:2017-11-17 11:05:47

标签: dynamic uiview appcelerator

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

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";
            }
        }

1 个答案:

答案 0 :(得分:2)

您可以使用$ .id从控制器引用视图中的元素,因此如果您有一个名为“myButton”的元素,则会将其引用为$ .myButton。如果您将名称作为变量传递给期望名为“element”的参数的函数,那么您将其解析为$ [element],其中element是表示id的字符串,因此在这种情况下为“myButton”。

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