我喜欢 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/