如何使用 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 中没有任何其他组件,或者如果您知道它们的位置,您只需将值添加到它即可。