如何在循环中添加事件侦听器 - 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。