参数必须是此视图android appcelerator的后代

时间:2017-04-21 20:39:30

标签: android appcelerator

我正在尝试从父视图中删除视图。当我做App.globalWindow.remove($ .wrapper);

应用程序崩溃 - xml文件看起来像

<Alloy>
    <View id="wrapper">
        <View id="overlay" />
        <View id="content" layout="vertical">
            <ScrollView id="sv_list" height="80%" layout="vertical" top="10" />
            <Button id="btn_select" top="10">Select</Button>
        </View>
    </View>
</Alloy>

1 个答案:

答案 0 :(得分:0)

我根据当前信息看到的唯一原因是你在其他一些.js文件中调用remove方法&amp;您希望 $ .wrapper 成为要删除的视图的ID,但 $ .wrapper 只能在该XML所属的同一.js文件中使用。

尽管如此,你仍然可以通过一个很好的解决方案来解决这个问题。

因为,在任何 Ti.UI.View Ti.UI.Window 上删除方法实际上会从此视图的层次结构中删除子视图,所以你可以反向执行,意味着,获取包装器视图的父级并调用remove方法。

就像这样:

// it will always work if you intend to use remove method
var wrapperParent = $.wrapper.getParent();
wrapperParent.remove($.wrapper);
wrapperParent = null;

// OR

$.wrapper.getParent().remove($.wrapper);

如果您在Appc文档中的任何位置看不到 getParent()方法,请不要感到惊讶:)

<强>建议:

  • 始终尽量避免对窗口,视图等重型对象使用全局变量
  • 从不使用Ti.App.addEventListener(),而是使用回调或Backbone事件调度程序 Read Here
  • 总有参考回到父视图&amp;儿童观点,因此你可以利用它们。
  • 如果你需要一些重要的方法来调用子视图,那么你可以在子视图中使用 exports 方法,并在父视图上调用该方法。