我喜欢Flex 4中的皮肤 - 它们在逻辑和造型之间提供了非常好的分离。
我想知道人们如何在皮肤中使用绑定。最简单的方法就是绑定皮肤:
label="{ hostComponent.model.buttonLabel }"
你也可以使用双向绑定:
selectedItem="@{ hostComponent.model.selectedItem }"
但你可以说这是逻辑,所以它应该在组件中真正处理。每次创建新外观时,您都不想重新创建所有绑定。这似乎很脆弱,容易产生错误。
那么有哪些替代方案呢?我想,创建一堆事件监听器。我认为adobe observe和observeValues标签也很有用。
其他人如何处理这个问题?
答案 0 :(得分:1)
我认为这是一个很好而有趣的问题。有几种选择。我想你可以将模型注入皮肤并直接绑定,但这似乎是错误的,因为我认为皮肤应该与组件紧密相连 - 如果组件更改其对模型的引用,它会自动在皮肤中更改。无论如何,它只会夸大你提到的问题。
您可以在皮肤中创建ID并从模型中对它们进行操作。例如
SKIN: label id="infoLabel"
COMPONENT: [SkinPart] var infoLabel:Label
creationComplete {
BindingUtils.bindProperty(this, 'infoLabel', model, 'infoLabel');
}
这解决了您的问题。在同一组件的皮肤之间不需要重复维护。但是使用BindingUtils需要付出代价。首先,它不是那么明显是什么 - 使用{}方式更加明显。其次(我认为这实际上只是第一点的一部分)你可能会混淆不那么有能力的开发人员,他们必须阅读你的代码并弄清楚发生了什么。
编辑:这假设您的组件在AS3中。如果您的组件是MXML,我猜您可以像往常一样在MXML中进行绑定。