如何使用Appcelerator动态定位使用common.js创建的UI元素?

时间:2018-04-01 07:11:29

标签: appcelerator-titanium commonjs appcelerator-alloy

我正在使用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);
    }
}

2 个答案:

答案 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;