如何显示来自 ArrowDB 的单个对象的详细信息#appcelerator

How to show details from ArrowDB for individual objects #appcelerator

我已经从 ArrowDB 查询并获得了一个事件列表,现在我想要单击特定视图时每个事件的详细信息。我的代码如下所示有效,除了它将所有查询事件的详细信息放在打开的 window 上,并在顶部显示最后一个查询事件。

请问我该怎么做?我的大脑无法解决这个问题。

 Cloud.Events.query(function (e) {
        if (e.success) {
            alert('Success:\n' + 'Count: ' + e.events.length);

            for (var i = 0; i < e.events.length; i++) {
                var event = e.events[i];
                alert('id: ' + event.id + '\n' +
                      'name: ' + event.name + '\n' +
                      'start time: ' + event.start_time);
                var holdview = Ti.UI.createView({
                     backgroundColor: '#d3d3d3',
                     backgroundImage: 'testview.png',
                     width: '85%',
                     height: '85%',
                     top: '5%'
                });

                //adding holdview to a scrollable view

               xperiencesscrollableview.addView(holdview);

               var testlabeltitle = Ti.UI.createLabel({
                    top: '5%',
                    width: '65%',
                    height: '10%',
                    left: '20%',
                    text: event.name
               }); 
               //it works well to this point and shows each event separately on views
               holdview.add(testlabeltitle);
       //adding forEach as suggested as an answer            
               e.events.forEach(function(event) {
        holdview.addEventListener('click',function(e){

            var detailstestname = Ti.UI.createLabel({
        top: '5%',
        width: '65%',
        height: '10%',
        left: '20%',
        text: event.name,
        color: 'black',
        backgroundColor: 'white'
        }); 
       //Page for event details
        eventdetailspage.open();
        eventdetailspage.add(detailstestname);
        });
 });    
               //at this point it messes up
            }
         }
     });

问题在于您使用的 for-loop 其代码块没有自己的作用域。当循环结束并处理 click 事件时,用于 detailstestname 标签的 event.name 将始终是最后一个循环的事件。

您可以使用闭包:

for (var i = 0; i < e.events.length; i++) {
  (function(event) {
    ..
  })(e.events[i]);
}

或使用.forEach():

e.events.forEach(function(event) {
  ..
});