使用 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] 应该可以。
有没有办法通过传递变量来定位特定的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] 应该可以。