Titanium:使用视图附加对象/变量

时间:2013-08-18 11:52:45

标签: javascript javascript-events titanium scope titanium-mobile

我在迭代对象列表的循环中创建一些视图。现在我想在每个视图中注册事件,这会在列表的当前对象上执行某些操作。

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

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

2 个答案:

答案 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事件的源对象。