我在迭代对象列表的循环中创建一些视图。现在我想在每个视图中注册事件,这会在列表的当前对象上执行某些操作。
for (var vs = 1; vs < 4; vs++) {
iMovie = moviesList[vs];
if (!iMovie) {
break;
}
var loopView = Ti.UI.createView({
....
});
loopView.addEventListener("click", function(e) {
var mv = iMovie;
Ti.API.info("Movie: " + mv);
if (mv) {
// do something
}
});
}
此代码无效,打印的日志为:Movie: undefined
。
所以我的问题是如何在事件监听器中使用循环变量?
答案 0 :(得分:1)
尝试以下代码
var loopView - [];
var iMovie;
for (var vs = 1; vs < 4; vs++) {
iMovie = moviesList[vs];
if (!iMovie) {
break;
}
loopView[vs] = Ti.UI.createView({
_iMovie : iMovie
});
loopView[vs].addEventListener("click", function(e) {
var mv = e.source._iMovie;
Ti.API.info("Movie: " + mv);
if (mv) {
// do something
}
});
}
答案 1 :(得分:0)
好吧,首先我会开始说明你在上面的代码中所做的事情可能会导致内存泄漏,因为你持有对iMovie变量的引用。
你应该尝试做的是:
var mv = e.source;
这将返回触发click事件的源对象。