【问题标题】:How to show details from ArrowDB for individual objects #appcelerator如何从 ArrowDB 显示单个对象的详细信息 #appcelerator
【发布时间】:2016-01-26 17:53:54
【问题描述】:

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

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

 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
            }
         }
     });

【问题讨论】:

    标签: javascript titanium appcelerator appcelerator-titanium arrowdb


    【解决方案1】:

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

    你可以使用闭包:

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

    或使用.forEach():

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

    【讨论】:

    • 使用时的闭包会阻止其他事件在可滚动视图中显示。 forEach 工作正常,但随后将所有文本添加到打开的页面中,最后一个值在所有
    • 我会将代码添加到上面的问题中,让您看看我做了什么
    • 你没有按照我的意思实施我的建议。 forEach() 应该替换 for 循环,而不是嵌套在其中。
    • 按照您的建议进行操作后,我将 .removeAllChildren() 添加到视图中以进行操作。谢谢。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2023-03-04
    • 1970-01-01
    • 2016-07-05
    • 1970-01-01
    • 2020-11-12
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多