如何在循环中添加事件侦听器 - Titanium Appcelerator
How to add event listeners in loop - Titanium Appcelerator
我正在从 POST 查询我的网络服务中获取数据以构建动态菜单。我想要的是系统听到每个视图的点击事件,并识别它是什么。但是我不知道发生了什么,因为没有添加 eventListener
...
我的代码如下:
getCategorias.onload = function() {
var json = this.responseText;
var response = JSON.parse(json);
for(var i = 0; i < response.length; i++) {
var containerAll = Ti.UI.createView({
width: "100%",
height: 130,
backgroundColor: "#000",
id: response[i].id
});
var viewImage = Ti.UI.createView({
backgroundImage: "http://www.iconomize.com.br/admin/"+response[i].foto,
backgroundColor: "#000",
opacity: "0.5",
width: "100%",
height: "100%",
top: "0"
});
var labelCat = Ti.UI.createLabel({
color: "#fff",
textAlign: "center",
width: "90%",
text: response[i].nome
});
containerAll.addEventListener('click', function(e){
alert(e.source.id);
});
containerAll.add(viewImage);
containerAll.add(labelCat);
$.listCategories.add(containerAll);
}
$.activityIndicator.hide();
};
尝试在图像和标签中添加"touchEnabled:false"。它工作正常(Android,Ti SDK 5.1.1)
实际上对我有用的是在 for-loop:
之外创建一个这样的函数
function handler(_obj)
{
_obj.addEventListener('click',function(e){
alert(_obj.id);
});
}
然后在您的 for-loop 中添加以下内容:handler(containerAll);
您可以在列表中添加一个 eventListener,而不是在循环中添加 eventListener。
$.listCategories.addEventListener('click', function(e){
alert(e.source.id);
//Do the required thing by using container id
});
你也可以设置
viewImage.touchEnabled = false;
labelCat.touchEnabled = false;
只是为了确保您在单击图像或标签时收到容器视图 e.source。
我正在从 POST 查询我的网络服务中获取数据以构建动态菜单。我想要的是系统听到每个视图的点击事件,并识别它是什么。但是我不知道发生了什么,因为没有添加 eventListener
...
我的代码如下:
getCategorias.onload = function() {
var json = this.responseText;
var response = JSON.parse(json);
for(var i = 0; i < response.length; i++) {
var containerAll = Ti.UI.createView({
width: "100%",
height: 130,
backgroundColor: "#000",
id: response[i].id
});
var viewImage = Ti.UI.createView({
backgroundImage: "http://www.iconomize.com.br/admin/"+response[i].foto,
backgroundColor: "#000",
opacity: "0.5",
width: "100%",
height: "100%",
top: "0"
});
var labelCat = Ti.UI.createLabel({
color: "#fff",
textAlign: "center",
width: "90%",
text: response[i].nome
});
containerAll.addEventListener('click', function(e){
alert(e.source.id);
});
containerAll.add(viewImage);
containerAll.add(labelCat);
$.listCategories.add(containerAll);
}
$.activityIndicator.hide();
};
尝试在图像和标签中添加"touchEnabled:false"。它工作正常(Android,Ti SDK 5.1.1)
实际上对我有用的是在 for-loop:
之外创建一个这样的函数function handler(_obj)
{
_obj.addEventListener('click',function(e){
alert(_obj.id);
});
}
然后在您的 for-loop 中添加以下内容:handler(containerAll);
您可以在列表中添加一个 eventListener,而不是在循环中添加 eventListener。
$.listCategories.addEventListener('click', function(e){
alert(e.source.id);
//Do the required thing by using container id
});
你也可以设置
viewImage.touchEnabled = false;
labelCat.touchEnabled = false;
只是为了确保您在单击图像或标签时收到容器视图 e.source。