Appcelerator - 在 dataCollection 生成的列表中隐藏 UI 元素

Posted

技术标签:

【中文标题】Appcelerator - 在 dataCollection 生成的列表中隐藏 UI 元素【英文标题】:Appcelerator - Hide UI element in list generated by dataCollection 【发布时间】:2017-04-14 14:12:36 【问题描述】:

我正在使用 Alloy 和 Alloy Collections 在应用程序中生成视图列表。我需要能够根据模型对象中的数据隐藏每个视图中的子元素。

例如我有一个合金视图:

<View dataCollection="$.collectionOfStuff">
    <Label>Always visible</Label>
    <Label>Only show when isVisible is true</Label>
    <Label>Another label always visible</Label>
</View>

假设$.collectionOfStuff 中的模型具有isVisible 属性,我希望能够根据该值隐藏第二个标签。在 Label 上设置 visible 属性很容易,但这只是隐藏元素并且不会回收空间 - 这意味着第一个和第三个标签之间存在间隙。我也需要第二个标签来停止占用空间。

我尝试使用数据绑定语法将hidden 类添加到元素 (&lt;Label class="hiddenWhenNotVisible"&gt;),但 Alloy 似乎无法解析类属性中的数据绑定标签。

这似乎不应该那么困难,所以我希望我遗漏了一些明显的东西。

【问题讨论】:

我认为您没有遗漏任何东西。我不相信数据绑定支持你正在尝试做的事情。 【参考方案1】:

你可以像这样使用可见属性:

<Label visible="isVisible"/>

或者使用 dataTransform 将宽度设置为 0 并且不占用 UI 上的空间

在视图中

<View dataCollection="$.collectionOfStuff" dataTransform="transformModel">
    <Label>Always visible</Label>
    <Label >Only show when isVisible is true</Label>
    <Label>Another label always visible</Label>
</View>

在控制器中

function transformModel(model)
    var data = model.toJSON();
    data.width = !data.isVisible ? 0 : 50;
    return data;

【讨论】:

这很好,但不太奏效。在元素上设置visible 属性可以将其对用户隐藏,但会保留元素在可见时占用的空间。 alloy 是有限的,尽管您可以在模型中添加另一个属性“width”,具体取决于您指定 width = 0 或显示时的大小,如

以上是关于Appcelerator - 在 dataCollection 生成的列表中隐藏 UI 元素的主要内容,如果未能解决你的问题,请参考以下文章

如何在 appcelerator 中裁剪图库图像?

appcelerator 是不是支持在聊天中发送视频

Appcelerator:垂直堆叠视图是不是可行?

Appcelerator 在特定元素之前和之后添加元素

Appcelerator 错误:项目未能在之后构建

更新 appcelerator 导致 android 应用程序崩溃