0

我在遍历对象列表的循环中创建一些视图。现在我想为每个视图注册事件,它对列表的当前对象执行某些操作。

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

所以我的问题是如何在事件监听器中使用循环变量?

4

2 回答 2

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
        }
    });
}
于 2013-08-18T15:05:20.530 回答
0

好吧,首先我要开始你在上面的代码中所做的事情可能会导致内存泄漏,因为你持有对 iMovie 变量的引用。

你应该尝试做的是:

var mv = e.source;

这将返回触发点击事件的源对象。

于 2013-08-18T14:22:28.497 回答