Javascript 钛:使用视图附着对象/变量
我在循环中创建一些视图,循环遍历对象列表。现在我想向每个视图注册事件,它对列表的当前对象执行某些操作Javascript 钛:使用视图附着对象/变量,javascript,scope,dom-events,titanium,titanium-mobile,Javascript,Scope,Dom Events,Titanium,Titanium Mobile,我在循环中创建一些视图,循环遍历对象列表。现在我想向每个视图注册事件,它对列表的当前对象执行某些操作 for (var vs = 1; vs < 4; vs++) { iMovie = moviesList[vs]; if (!iMovie) { break; } var loopView = Ti.UI.createView({ .... }); loopView.addEventListener("cl
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
}
});
}
for(变量vs=1;vs<4;vs++){
iMovie=电影列表[vs];
如果(!iMovie){
打破
}
var loopView=Ti.UI.createView({
....
});
loopView.addEventListener(“单击”,函数(e){
var mv=iMovie;
Ti.API.info(“电影:+mv”);
中频(毫伏){
//做点什么
}
});
}
此代码不工作,打印的日志为:Movie:undefined
因此,我的问题是如何在事件侦听器中使用循环变量?首先,我要开始说明,您在上面的代码中所做的操作可能会导致内存泄漏,因为您持有对iMovie变量的引用 您应该尝试做的是:
var mv = e.source;
这将返回触发单击事件的源对象。请尝试以下代码
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
}
});
}
var-loopView-[];
var iMovie;
对于(变量vs=1;vs<4;vs++){
iMovie=电影列表[vs];
如果(!iMovie){
打破
}
loopView[vs]=Ti.UI.createView({
_伊莫维:伊莫维
});
loopView[vs].addEventListener(“单击”),函数(e){
var mv=e.源;
Ti.API.info(“电影:+mv”);
中频(毫伏){
//做点什么
}
});
}