在我的Titanium应用程序中,我有一个包含6个相同字段的表单,唯一的区别是它们的标题。而不是重复码(不好的做法,更多的工作,等)的我用一个for循环动态创建与2个标签的每个字段和一个视图:动态分配事件Listseners
//Required info
var startht = 30;
var sz = 40;
var width = '90%';
var labelgrp1 = new Array('Field 1', 'Field 2', 'Field 3', 'Field 4', 'Field 5', 'Field 6');
var viewbg = '#D4D4D4';
//For the first group of labels
for(var i=0; i<labelgrp1.length; i++) {
var view = Titanium.UI.createView({
borderColor:'#000',
backgroundColor:viewbg,
touchEnabled: true,
width:width, height:40,
top: startht + i * (sz - 1)
});
var label = Ti.UI.createLabel({
color: '#303030',
font: { fontSize:16 },
shadowColor: '#aaa',
shadowOffset: {x:1, y:1},
text: labelgrp1[i],
left:10,
width: 'auto', height: 'auto'
});
var symbol = Ti.UI.createLabel({
color: '#303030',
font: { fontSize:14 },
right:10,
text: '>',
width: 'auto', height: 'auto'
});
view.add(label);
view.add(symbol);
win.add(view);
}
我尝试添加这对底部:
view.addEventListener('focus',function(e){
Ti.API.info("Clicked on " + label.text);
});
但无济于事。有没有办法动态创建事件侦听器,还是我需要为每个字段设置一个单独的视图对象,以便它可以直接绑定到事件侦听器?
我不打算添加文本字段,但看起来很棒。我不能说我理解这里发生了什么。你介意解释一下(view,label.text)在函数后面,或者它是如何工作的? – eliot 2013-03-13 20:50:46
这是一个匿名的自我调用(或自我调用)函数。我们将view和label.text传递给它,它被称为v和msg作为函数的参数。 'view'变量随着for循环的每次迭代而变化,通过这样做,我们将视图锁定为'v',这将不会被覆盖。有一些更好的解释[这里](http://stackoverflow.com/questions/6783723/what-is-this-function)和[这里](http://blog.mgechev.com/2012/08/29/自我呼叫函数式的JavaScript /)。 – 2013-03-13 21:56:08
完美的解释。简洁明白,谢谢! – eliot 2013-03-13 23:09:09