【问题标题】:Titanium : Attach objects/variables with a viewTitanium:将对象/变量附加到视图中
【发布时间】:2013-08-20 08:41:49
【问题描述】:

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

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

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

【问题讨论】:

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


    【解决方案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
            }
        });
    }
    

    【讨论】:

      【解决方案2】:

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

      你应该尝试做的是:

      var mv = e.source;
      

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2014-02-06
        • 1970-01-01
        • 2019-08-15
        • 2023-04-09
        • 2013-10-15
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多