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”);
中频(毫伏){
//做点什么
}
});
}