如何使用 Appcelerator 动态定位使用 common.js 创建的 UI 元素?
How to target dynamically UI elements created with common.js with Appcelerator?
我正在使用 Alloy 并且通常使用控制器轻松定位 ui.xml 中的元素:
ui.xml
<Label id ="block1">
controller.js
$.block1.backgroundColor = "red";
但是 我如何定位在控制器文件管理器中创建的 UI 元素(在创建元素的函数之外)?特别是,当 for 循环创建元素时,我以后如何动态地将 block2 的背景色设置为 "green" ?
$.block2.backgroundColor = "green";
不起作用,因为该元素不在 .xml 文件中
function createBlocks(){
for (i=0;i<=27;i++){
var block = Ti.UI.createLabel({
id: "block"+ i,
backgroundColor: "red",
text: i,
width: 10,
left: 2 + (10 * i),
});
$.hammerListStats.add(block);
}
}
在你的代码的其他地方你应该能够做这样的事情...
var i = 1;
var mytext = $["block"+ i].text;
您正在创建的 block
个元素仅在循环内以该名称存在。您要么需要将它们存储在数组中,要么使用 $.hammerListStats.children
或访问它们。
所以要么在循环 var elements = []
之前创建一个空数组,在循环内部使用 elements.push(block)
并使用 elements[0].text=...
更改文本。
或仅使用 $.hammerListStats.children[0].text = ...
访问它们。只要您在 $.hammerListStats
中没有任何其他组件,或者如果您知道它们的位置,您只需将值添加到它即可。
我正在使用 Alloy 并且通常使用控制器轻松定位 ui.xml 中的元素:
ui.xml
<Label id ="block1">
controller.js
$.block1.backgroundColor = "red";
但是 我如何定位在控制器文件管理器中创建的 UI 元素(在创建元素的函数之外)?特别是,当 for 循环创建元素时,我以后如何动态地将 block2 的背景色设置为 "green" ?
$.block2.backgroundColor = "green";
不起作用,因为该元素不在 .xml 文件中
function createBlocks(){
for (i=0;i<=27;i++){
var block = Ti.UI.createLabel({
id: "block"+ i,
backgroundColor: "red",
text: i,
width: 10,
left: 2 + (10 * i),
});
$.hammerListStats.add(block);
}
}
在你的代码的其他地方你应该能够做这样的事情...
var i = 1;
var mytext = $["block"+ i].text;
您正在创建的 block
个元素仅在循环内以该名称存在。您要么需要将它们存储在数组中,要么使用 $.hammerListStats.children
或访问它们。
所以要么在循环 var elements = []
之前创建一个空数组,在循环内部使用 elements.push(block)
并使用 elements[0].text=...
更改文本。
或仅使用 $.hammerListStats.children[0].text = ...
访问它们。只要您在 $.hammerListStats
中没有任何其他组件,或者如果您知道它们的位置,您只需将值添加到它即可。