Titanium无法删除子视图

时间:2014-10-21 15:18:21

标签: javascript titanium titanium-alloy

我有ScrollView我正在使用此代码添加多个View

payload = {
    booking : b,
    duration: duration,
    removeBooking: function(view_to_remove) {
        removeBooking(view_to_remove);
    },
    updateBooking: function(view_to_remove, new_booking) {
        removeBooking(view_to_remove);
        overlayBooking(new_booking);
    }
};

booking = Alloy.createController('appointments_bookable_booking', payload).getView(); // returns a View
$.intervals_container.add(booking); // this is adding a View into a ScrollView
...
然后

removeBooking()作为回调被执行。然后我尝试删除单个View,如下所示:

function removeBooking(booking_view) {

    for (var i = $.intervals_container.children.length - 1; i >= 0; i--) {
        if(booking_view === $.intervals_container.children[i]) {
            Ti.API.info('Found a match');
            $.intervals_container.remove($.intervals_container.children[i]);
        }
    };

}

我循环浏览孩子只是为了显示我试图删除的视图实际上存在于子视图数组中。我确实得到了“匹配”#39;打印到我的控制台,但视图从未被实际删除。

还有其他观点被添加到ScrollView中。如果我遍历intervals_container.children并删除每一个。除了使用上面的代码创建的视图之外,其他视图也被删除。

任何人都可以看到为什么我无法移除视图吗?

更新

在尝试ericfreshz'答案后,我可以删除所有视图但是这不能删除一个:

if ($.intervals_container.children) {
        var _viewCount = $.intervals_container.children.length;
        for ( s = 0; s < _viewCount; s++) {
            if($.intervals_container.children[((_viewCount - 1) - s)] === booking_view) {
                Ti.API.info('Removing view');
                $.intervals_container.remove($.intervals_container.children[((_viewCount - 1) - s)]);
            }
    }
}

这应该只删除已经传递给函数的视图,但它不会。我得到&#34;删除视图&#34;在我的控制台中,但视图没有删除。

更新2

我做了一个实验,看看是否实际更改了滚动视图,事实证明视图实际上被移除了,因为子视图的数量实际上减少了,但视图仍然可见。

Ti.API.info('Count BEFORE: ' + $.intervals_container.children.length);

$.intervals_container.remove(booking_view);

Ti.API.info('Count AFTER: ' + $.intervals_container.children.length);

结果少一点。

2 个答案:

答案 0 :(得分:0)

让我们尝试下面的代码:

if ($.intervals_container.children) {
   var _viewCount = $.intervals_container.children.length;
   for ( s = 0; s < _viewCount; s++) {
        $.intervals_container.remove($.intervals_container.children[((_viewCount - 1) - s)]);
   }
}    

答案 1 :(得分:0)

首先是为什么不简单地调用

$.intervals_container.remove(booking_view);

我认为你不需要经历儿童和孩子的麻烦。 这应该工作 如果没有,你可以尝试更改scrollview布局(高度,宽度,左...),看看是否改变了什么? (可能是布局更新问题)。

作为旁注,你应该提到“孩子”。每次访问它时,都需要本地制作副本。此外还有一个锁,所以它可能会变长。