如何在 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()
。取决于您的用例
使用
定位 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 中,您将使用不带 $.
例如这有效:
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()
。取决于您的用例