리스트 클릭시 이벤트가 발생하여 새로운 controller창에 고유값을 전달해주려고하는데 잘안되네요

function getThings()
{
	// show activity indicator
	// create an empty data array
	var data = [];
	// create an empty results array
	var results = [];
	// create the httpRequest 
	var titleLabel = [];
	var dex = [];
	var xhr = Titanium.Network.createHTTPClient(); 
	// open the httpRequest 
	xhr.open('post','http://jhcweb.co.kr/test4.php'); 
	// this method will be called when the request is complete
	xhr.onload = function(){ 
		// hide activity indicator
		// parse json coming from the server
		var json = JSON.parse(this.responseText);
		
		// if things are returned
 		if(json.things)
		{
	 		// loop through all of our things
	 		for (var i = 0; i < json.things.length; i++) 
	 		{
	 			dex[i] = json.things[i].idx;
				// create a new table row
				var row = Ti.UI.createTableViewRow();
				// create a label inside the table row
				titleLabel[i] = Ti.UI.createLabel({
					text: json.things[i].name,
					left: 10,
					top: 10,
					height: 40,
					width: 210,
					value:json.things[i].idx
				});
				row.add(titleLabel[i]);
				// push the row object to the data array
				data.push(row);
				
				titleLabel[i].addEventListener("click",function(e){
					alert(i);
					var win = Alloy.createController("view",{idx:dex[i]}).getView();
					win.open();
				});
				
			}
			// populate the things table with data
			$.thingsTable.data = data;
		}

	}; 
	
	// this method will be called if there is an error 
	xhr.onerror = function()
	{
		alert(this.error + ': ' + this.statusText);
		return false;
	};

	xhr.send();
}

getThings();
$.select.open();

코드는 아래 글에 나온 방법처럼 하면 코드가 이쁘게 보입니다.
개인적으로 가장 추천하는 방법은
``` (키보드 1옆의 키 세번)을 코드 맨 첫줄과 맨 아랫줄에 넣으면 됩니다.

클로저

이 코드의 가장 큰 문제점은 바로 아래 부분에 있습니다.

for (var i = 0; i < json.things.length; i++) {
	// 생략
	titleLabel[i].addEventListener("click", function(e) {
		alert(i);
		// 생략 
	});
}

클로저로 인해서 그 무든 이벤트 핸들러 함수가 실행 될때마다 똑같은(=json.things.length)가 나온다는 겁니다. 핸들러 내부에서 참조하는 i는 스코프체인의 해당 함수 실행 컨텍스트가 아닌 스코프체인에서 상위 스코프에 존재합니다. 그래서 모두 같은 i를 참조하게 됩니다.

아래 링크를 참조하세요. developer.mozilla.orgd 의 클로저 설명 글 중 자주하는 실수 부분과 동일한 원인입니다.

event listener

위에서 처럼 모든 label에 전부 event 리스너를 거는 것 보다 tableview의 click을 이용해서 넘어오는 정보로 해당 row나 클릭 ui 콘트롤이 무엇인지 확인하는 방법이 더 좋습니다.

listview vs. tableview

특별히 tableViewRow 내부의 view에 대해 property 변경이 아닌 직접적인 view의 함수를 호출해야하는 경우가 아니거나 tableview의 scroll 정보를 아주 디테일하게 알아야하는 경우가라면 listview 사용을 추천합니다. 훨씬 성능이 좋습니다.