3

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

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

label="{ hostComponent.model.buttonLabel }"

您还可以使用 2 路绑定:

selectedItem="@{ hostComponent.model.selectedItem }"

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

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

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

4

1 回答 1

1

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

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

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

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

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

于 2011-06-28T15:56:52.750 回答