0

Я привожу данные из запроса POST на свой веб-сервис для создания динамического меню. Я хочу, чтобы система слышала событие щелчка каждого представления и определяла, что это такое. Но я не знаю, что происходит, потому что EventListener не добавляется ...Как добавить прослушиватели событий в цикле - Titanium Appcelerator

Мой код ниже:

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(); 
}; 
+3

Я думаю, что лучше всего добавить только слушателя в '. .listCategories' один раз и в функции функции прослушивателя с помощью' id' like '$ .listCategories.addEventListener ('click', function (e) { alert (e.source.id); }); ' – Swanand

+0

Просто практическое замечание: не стоит помещать слушателей в цикл. Слушатели пассивны и не требуют динамического распределения. Мне нравится @Suraj идея добавления их в список, а затем их при необходимости. Если вам нужно удалить их, вы можете прокрутить список и применить 'removeListener()' итеративно. –

ответ

2

Вместо добавления цикла 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 когда нажмите на изображение или этикетке.

1

Попробуйте добавить «touchEnabled ложь» к изображению и этикетки. Чем это работает отлично (Android, Ti SDK 5.1.1)

1

На самом деле то, что работает для меня, чтобы создать функцию, как это вне для петли:

function handler(_obj) 
{ 
    _obj.addEventListener('click',function(e){ 
     alert(_obj.id); 
    }); 
} 

Затем в течение петли просто добавьте следующее: handler(containerAll);

Смежные вопросы