3

Flex 4のスキンが大好きです。これらのスキンは、ロジックとスタイリングを非常にうまく分離しています。

私は人々がスキンでバインディングをどのように使用するのか疑問に思いました。最も簡単な方法は、皮膚にバインドすることです。

label="{ hostComponent.model.buttonLabel }"

2ウェイバインディングを使用することもできます。

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

ただし、これはロジックであるため、実際にはコンポーネントで処理する必要があると主張できます。新しいスキンを作成するたびに、すべてのバインディングを再作成する必要はありません。それは壊れやすく、バグを作成する傾向があるようです。

では、代替案は何ですか?イベントリスナーのバケットロードを作成すると思います。adobeobserveタグと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 に答える