2009-09-15 2 views
17

にゲッターは以下のコードを検討:への結合は、読み取り専用AS3

[Bindable(event="ReportHeaderVO_effectiveFromDateJulian_updated")] 
public function set effectiveFromDateJulian (value:Number) : void 
{ 
    _effectiveFromDateJulian = value; 
    dispatchEvent(new FlexEvent("ReportHeaderVO_effectiveFromDateJulian_updated")); 
} 

public function get effectiveFromDateJulian() : Number 
{ 
    return _effectiveFromDateJulian; 
} 

public function get effectiveFromDate() : Date 
{ 
    return DateUtil.convertJDEJulianToDate(_effectiveFromDateJulian); 
} 

日付の数値表現であるセッターとeffectiveFromDateJulianためのゲッターがあります。私は同じ値を取得し、適切な日付に変換するだけの別個のゲッターを提供しました。それはゲッターだけですが、そのデータを取得するために数値プロパティの設定ツールを利用しています。したがってeffectiveFromDateプロパティは効果的に読み取り専用です。

データバインディングはeffectiveFromDateJulianプロパティで機能します。すべての更新はうまく動作し、すべてを正しく通知します。 effectiveFromDate(のみゲッター)プロパティにバインドする場合でも、私は、コンパイラから警告を受ける:

warning: unable to bind to property 'effectiveToDate' on class 'com.vo::ReportHeaderVO' 

は、この読み取り専用プロパティにバインドすることを可能にする方法はありますか?私は、読み取り専用のプロパティに影響を与えるイベントをセッターにディスパッチする必要があると仮定しますが、そのように見えるのはわかりません。

これは単純な例です。いくつかのセッターが機能するかどうかに依存する読み取り専用プロパティーを想像すると、これらのセッターのいずれかが更新されると、読み取り専用プロパティーもpropertyChangedイベントを発生させる必要があります。何か案は?私が何かを明確にする必要があるかどうか私に教えてください。

アップデート:ここではAdobeのドキュメントから :あなたは、自動的に読み取り専用 プロパティを使用することができます

をデータバインディングの ソースとしての読み取り専用プロパティを使用して

http://livedocs.adobe.com/flex/3/html/help.html?content=databinding_8.html

getterメソッドで定義された はセッターメソッドを意味しません。データバインディング式のソースは です。 アプリケーションが起動すると、Flexはデータバインディングを一度実行します( )。

読み取り専用のプロパティからのデータバインディングが アプリケーションの起動時に1回だけ発生するので、あなたは 読み取り専用プロパティの [Bindable]メタデータタグを省略します。

これは一定の値には意味がありますが、この場合は値が変更され、直接設定されません。

答えて

16

読み取り専用ゲッターをバインド可能にして、対応するイベントを元のセッターメソッドからディスパッチします。

[Bindable(event="ReportHeaderVO_effectiveFromDateJulian_updated")] 
public function set effectiveFromDateJulian (value:Number) : void 
{ 
    _effectiveFromDateJulian = value; 
    dispatchEvent(new FlexEvent("ReportHeaderVO_effectiveFromDateJulian_updated")); 
    dispatchEvent(new FlexEvent("ReportHeaderVO_effectiveFromDate_updated")); 
} 
[Bindable(event="ReportHeaderVO_effectiveFromDate_updated")] 
public function get effectiveFromDate (date:Date) : Date 
{ 
    return DateUtil.convertJDEJulianToDate(_effectiveFromDateJulian); 
} 
+0

これは、私が探していたものと全く同じです。それを見た後、それはどのように、なぜそれがうまくいくのかを完全に理解していますが、これがどうあるべきかということはドキュメントではまだ分かりません。したがって、[Bindable(event)]メタデータを置くと、ドキュメントがセッターに置かれているように見えますが、実際にはプロパティ(公開されているプロパティ)に置かれています。ゲッターに簡単に貼ることができ、同じことができます。 ちょうど好奇心のために、あなたはこのドキュメントへのリンクを持っていますか? もう一度おねがいします!これは多くの助けとなりました。 –

+2

http://livedocs.adobe.com/flex/3/html/help.html?content=databinding_2html#190306には、「イベント名を指定すると、ソースプロパティが変更されたときにイベントをディスパッチするのはあなたの責任です」と記載されています。私はちょうどそれを試み、それは働いた。グーグルで私をhttp://www.deitte.com/archives/2009/04/bindable_getter.htmに導き、http://joshblog.net/2009/07/15/flex-readonly-bindable-getter-ignored-warning-説明/ – Amarghosh

+1

そして、それはプロパティに適用される[Bindable]タグ(getterまたはsetter)をどこに置いても問題ありません。 asdocの目的のために、それはセッターに置くのが良いです。 – Amarghosh

関連する問題