如何在 Appcelerator 中动态定位 UI 元素?

How to dynamically target UI Elements in Appcelerator?

使用

定位 Alloy 元素很容易

views.xml:

<Label id="targetID1"/>
<Label id="targetID2"/>
<Label id="targetID3"/>

controller.js:

$.targetID1.backgroundColor = "red";
$.targetID2.backgroundColor = "green";
$.targetID3.backgroundColor = "blue";

但是有没有办法将目标 ID 动态传递给一个函数并在此函数中设置值?特别是,我想更改最后选择的对象。

例如:

var selectedObject;

function clickOnObject(e) {
selectedObject = e.source.id;
return selectedObject;
}

changeBackgroundColor(selectedObject)

//should change the background color of the selected object passed to the function

function changeBackgroundColor(id) {
    $.id.backgroundColor = "orange" //this does not work
}

我找到了这个 (Select dynamically generated element by id in Titanium Appcelerator) 但我不确定这是否是同一回事。

我有多个字段并使用了 switch 语句。这当然是相当麻烦的。

在你的情况下你可以使用 selectedObject = e.source 没有id。然后你的变量中就有了整个对象。在 changeBackgroundColor 中,您将使用不带 $.

的 id

例如这有效:

var obj;

function fn(){
    obj.title = "testasdf"
}

$.btn1.addEventListener("click",function(e){
    obj = e.source;
    fn();

});
$.btn2.addEventListener("click",function(e){
    obj = e.source;
    fn();
});

在 index.xml 中创建了两个按钮。但是您可以在没有 var obj 的情况下使用它,只需将 e.source 作为参数传递给 fn()。取决于您的用例