actionscript-3 - Flex 4 皮肤和绑定(bind)

标签 actionscript-3 apache-flex flex4

我喜欢 Flex 4 中的皮肤——它们在逻辑和样式之间提供了非常好的分离。

我想知道人们如何在皮肤中使用绑定(bind)。最简单的方法是在皮肤上绑定(bind):

label="{ hostComponent.model.buttonLabel }"

您还可以使用 2 路绑定(bind):
selectedItem="@{ hostComponent.model.selectedItem }"

但是您可能会争辩说这是逻辑,因此它应该在组件中真正处理。您真的不想在每次创建新皮肤时重新创建所有绑定(bind)。这似乎很脆弱并且容易产生错误。

那么有哪些替代方案呢?我想创建一个事件监听器的桶负载。我想 adobe observe 和 observeValues 标签也很有用。

其他人如何处理这个问题?

最佳答案

我认为这是一个很好且有趣的问题。有几种选择。我想您可以将模型注入(inject)皮肤并直接绑定(bind),但这似乎是错误的,因为我认为皮肤应该与组件密切相关 - 如果组件更改其对模型的引用,它会自动更改皮肤。无论如何,它只会夸大你提到的问题。

您可以在皮肤中创建 id 并从模型中对其进行操作。例如

SKIN: label id="infoLabel"
COMPONENT: [SkinPart] var infoLabel:Label
creationComplete {
  BindingUtils.bindProperty(this, 'infoLabel', model, 'infoLabel');
}

这解决了你的问题。同一组件的蒙皮之间无需重复维护。然而,使用 BindingUtils 是有代价的。首先,什么与什么绑定(bind)并不那么明显 - 使用 {} 方式更加明显。其次(我想这实际上只是第一点的一部分)你可能会混淆那些必须阅读你的代码并弄清楚发生了什么的能力较差的开发人员。

编辑:这假设您的组件在 AS3 中。如果您的组件在 MXML 中,我想您可以像通常在 MXML 中那样绑定(bind)。

关于actionscript-3 - Flex 4 皮肤和绑定(bind),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2216602/

相关文章:

actionscript-3 - 加载外部 vdo 时询问属性 onMetaData 的错误消息但是,vdo 仍然可以播放

apache-flex - 添加到集合时排序集合和排序保持原位?

actionscript-3 - 如何防止按键传播

apache-flex - 如何在两个组件周围绘制连接边框?

mysql - 如何从数据库中选择前 10 个值并将其存储在 PHP 变量中

actionscript-3 - 通过 AS3 套接字向我的 FTP 站点发送字节的问题

actionscript-3 - Actionscript 3,只能读取文件的一部分而不将整个文件加载到内存中

flash - 为什么有些用户在 Flash 应用程序中收到 rsl 错误?

c++ - 将现有的 C++ 代码与 flex 接口(interface)

actionscript-3 - Intellij IDEA - Actionscript 项目 - 无法连接 Flash Player 的调试器版本