如何跟踪Titanium中的UI元素?假设您有一个带有TableView的窗口,其中包含一些Switch(开/关),并且您希望使用通用事件侦听器引用已更改的开关onchange。有属性event.source,但你仍然不知道表单的哪个字段只是切换,你只需要对元素的引用。有没有办法给元素一个ID,就像在JavaScript中使用radiobutton一样?
到目前为止,在字典中注册了每个表单UI元素,并一次保存所有值,循环遍历字典并获取每个对象值。但是现在我想在onchange上做这个,除了为每个元素创建一个特定的回调函数之外我找不到任何其他方法(我真的不想这样做)。
答案 0 :(得分:1)
一个简单的解决方案是使用一个框架,帮助您跟踪所有元素,从而加快开发速度,随着项目和应用程序的增长。我已经构建了一个我自己的框架Adamantium.js,它允许您使用类似jQuery的语法来处理您的元素,基于 ID和类型选择器。在即将发布的版本中,它还将支持类似于类的内容,可以从元素中任意添加或删除,跟踪主/从关系和基本过滤方法,以帮助您缩小查询范围。大多数方法都是可链接的,因此构建具有丰富交互的应用程序既快速又简单。
快速演示:
// Type selector, selects all switches
$(':Switch')
// Bind a callback to the change event on all switches
// This callback is also inherited by all new switch elements
$(':Switch').bind('change', function (e) {
alert(e.type + ' fired on ' + e.source.id + ', value = ' + e.value);
});
// Select by ID and trigger an event
$('#MyCustomSwitch').trigger('change', {
foo: 'bar'
});
然后在框架中有很多其他很酷的方法,它们都旨在加速开发并以熟悉的jQuery方式建模more about that in the original blog post。
答案 1 :(得分:1)
我完全理解不想为每个人编写一个监听器,因为这非常耗时。我遇到了同样的问题并且解决了它。
var switches = [];
function createSwitch(i) {
switches[i] = Ti.UI.createSwitch();
switches[i].addEventListener('change', function(e) {
Ti.API.info('switch '+i+' = '+e.value);
});
return switches[i];
}
for(i=0;i<rows.length;i++) {
row = Ti.UI.createTableViewRow();
row.add(createSwitch(i));
}
但请记住,此解决方案可能无法满足您的需求。对我来说这很好,因为每次我创建一个开关时它都动态地添加了一个监听器然后我可以简单地让开关的e.source.parent
与我需要的任何东西进行交互。
答案 2 :(得分:1)
只需为元素分配和识别...所有这些其他解决方案都能正常工作,但它们似乎对你所要求的东西过度杀戮。
// create switch with id
var switcher0 = Ti.Ui.createSwitch({id:"switch1"});
然后在你的事件监听器
中myform.addEventListener('click', function(e){
var obj = e.source;
if ( obj.id == "switch1" ) {
// do some magic!!
}
});
答案 3 :(得分:1)
模块ID仅用于保存它的ID。当我们使用id时,只需使用另一个空间。并轻松使用。 试试这个
var but1 = Ti.Ui.createButton({title : 'Button', id:"1"});
window.addEventListener('click', function(e){
var obj = e.source;
if ( obj.id == "1" ) {
// do some magic!!
}
});
window.add(but1);
我认为这对你很有帮助。
答案 4 :(得分:0)
如何创建tableview和切换器?通常我会在创建切换器时定义eventListener函数。
// first switch
var switcher0 = Ti.Ui.createSwitch();
switch0.addEventListener('change',function(e){});
myTableViewRow.add(switch0);
myTableView.add(myTableViewRow);
// second switch
var switch1 = ..
因此不需要通用事件监听器。