我正在使用Alloy并且通常使用控制器轻松地将ui.xml中的元素作为目标:
ui.xml
<Label id ="block1">
controller.js
$.block1.backgroundColor = "red";
但我如何定位在控制器文件管理器中创建的UI元素(在创建元素的函数之外)?特别是,当for循环创建元素时,我怎么能在以后动态地将block2的背景颜色设置为“绿色”?
$.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);
}
}
答案 0 :(得分:1)
您在循环内仅在该名称下创建的block
元素。您需要将它们存储在数组中,或使用$.hammerListStats.children
访问它们。
因此要么在循环var elements = []
之前创建一个空数组,要在循环中使用elements.push(block)
并使用elements[0].text=...
来更改文本。
或者只需使用$.hammerListStats.children[0].text = ...
即可访问它们。只要您在$.hammerListStats
内没有任何其他组件,或者如果您知道他们的位置,您只需将值添加到其中即可正常工作。
答案 1 :(得分:0)
在你的代码的其他地方,你应该可以做这样的事情......
var i = 1;
var mytext = $["block"+ i].text;