フレックス警告:できない結合のプロパティ'foo'にクラスオブジェクト'クラスではないIEventDispatcher)

StackOverflow https://stackoverflow.com/questions/928081

質問

私のオブジェクトを含む十数分野においbindを押してフォーム変数を新規作成ができるよう、使用するオブジェクトを送信するデータをサーバに保存されます。

定義のコンテナオブジェクト:

private static const emptyLink:Object = {
    id: -1, title:'',
    trigger1:'',trigger2:'',trigger3:'',trigger4:'',trigger5:'',
    linkTitle:'', linkBody:'',
    answer1:'',answer2:'',answer3:'',answer4:'',answer5:''
};

[Bindable] public var currentLink:Object = emptyLink;

currentLink は実行時に特定のインデックスからArrayCollection、私だけを使用 emptyLink オブジェクトの初期化目的です。

<mx:Panel id="triggerPanel" title="Trigger" width="33%">
    <mx:VBox id="tpBoxes" width="100%" paddingBottom="5" paddingLeft="5" paddingRight="5" paddingTop="5">
        <mx:TextInput id="trigger1" width="100%" textAlign="left" text="{currentLink.trigger1}" />
        <mx:TextInput id="trigger2" width="100%" textAlign="left" text="{currentLink.trigger2}" />
        <mx:TextInput id="trigger3" width="100%" textAlign="left" text="{currentLink.trigger3}" />
        <mx:TextInput id="trigger4" width="100%" textAlign="left" text="{currentLink.trigger4}" />
        <mx:TextInput id="trigger5" width="100%" textAlign="left" text="{currentLink.trigger5}" />
    </mx:VBox>
</mx:Panel>

もちろん、この収集および表示には、イブレア城、イブレアがあり、ランタイムの警告のための各インスタンス:

警告:できない結合のプロパティ'trigger1"のクラスオブジェクト'クラスではないIEventDispatcher) 警告:できない結合のプロパティ'trigger2"のクラスオブジェクト'クラスではないIEventDispatcher) 警告:できない結合のプロパティ'trigger3"のクラスオブジェクト'クラスではないIEventDispatcher) 警告:できない結合のプロパティ'trigger4"のクラスオブジェクト'クラスではないIEventDispatcher) 警告:できない結合のプロパティ'trigger5"のクラスオブジェクト'クラスではないIEventDispatcher)

currentLink オブジェクトが更新されない TextInput 分野が変更されます。

その答えは、自分のオブジェクトニクラスのインスタンスを実装する IEventDispatcher.その答えはないの事項を実施するインターフェース(何が必要ですか?何がそうではないのかというこ?), があれば、より簡単に行うこと--などの内蔵のクラスは喜んで受け入れカスタムプロパティはより結合せず、思いの事項を実施し、インターフェース。

このようなクラスがありますか?ない場合には何の観光スポットを表示一部の観光や受け入れ基準を達成するための作業?

役に立ちましたか?

解決

あなたはObjectProxyを(チェタンが言及される)を使用する必要があります - しかし、あなたはまた、あなたのオブジェクトにBACK入力に入力したテキストを取得するためにはvalueCommitを使用する必要があります:

<?xml version="1.0" encoding="utf-8"?>
<mx:WindowedApplication xmlns:mx="http://www.adobe.com/2006/mxml" layout="absolute">
    <mx:Script>
        <![CDATA[
            import mx.utils.ObjectProxy;
              private static const emptyLink:Object = {
    id: -1, title:'',
    trigger1:'',trigger2:'',trigger3:'',trigger4:'',trigger5:'',
    linkTitle:'', linkBody:'',
    answer1:'',answer2:'',answer3:'',answer4:'',answer5:''
};

[Bindable] public var currentLink:ObjectProxy = new ObjectProxy(emptyLink);


private function handleClick():void
{
    trace(currentLink.trigger1);
}
]]>
</mx:Script>

<mx:Panel id="triggerPanel" title="Trigger" width="33%">
        <mx:VBox id="tpBoxes" width="100%" paddingBottom="5" paddingLeft="5" paddingRight="5" paddingTop="5">
                <mx:TextInput  id="trigger1" width="100%" textAlign="left" text="{currentLink.trigger1}" valueCommit="{currentLink.trigger1 = trigger1.text;}"/>

                <mx:Button label="Click" click="handleClick()"/>
        </mx:VBox>
</mx:Panel>        

</mx:WindowedApplication>

他のヒント

Objectは、イベントを送出しません。あなたは、変数バインド可能になされているが、変数currentLinkによって参照されるオブジェクトのプロパティをバインドすることはできません。

の代わりにObjectProxyを使用します。

[Bindable] public var currentLink:ObjectProxy = new ObjectProxy(emptyLink);

最初のものだけを知りたいとの結合にフレックス3ではない双方向での使用が可能です。の拘束表現をした場合には、ソースの結合式(currentLink.trigger1)の変化は、対象となる(TextInput)の通知を受け取りの変更-更新します。したい場合は、結合、その他の方向性が少なくともこれを行なうには二つ方法:

  1. 利用mx:結合タグを直接TextInput.テキストのオブジェクト
  2. 利用BindingUtilsこのプログラムです。

フレックス4人が新しい書式の双方向結合@{ある。拘束力を有します。表現}でにないフレックス3.

第2部:しているとエラーが表示されるんですが結合するが、"ジェネリック"試作オブジェクトです。適用した場合の[結合性]メタデータのタグホテルグランドパレスのすぐ横にはクラスのMXMLCコンパイラの発生などを含むコードを使用binding費されるプロパティ変更景にするようになったのは、結合が起こる。しかしすることができず、試作オブジェクトならではですのでお問い合わせ下さい。を作成できるカスタムActionScriptクラスである結合性又は特定の性質を結合性).のMXMLCコンパイラを生成するクラスを実装するIEventDispatcherて対応します。こいという利点よりも早く試作品物もコンパイル時のチェックする届きますのでコンパイラエラーの場合の参照が無効な物件です。

その他の代替ではコチラのプロトタイプObjectProxyの一つとして、他では考えられる。

大規模プロジェクトにおける問題のあるコードを見つける方法についてのちょうどヒントを - にブレークポイントを置く2つの

trace("warning: unable to bind to property '"

SDKのPropertyWatcherクラスのライン(移動>オープンタイプ> ...)。スタックトレースは、あなたが壊れた結合を保持しているUIコンポーネントを見つけましょう。

一般的に、なぜかできない"と結合する物件fooるクラスで ま欠ゲッターまたはセッター foo.す もfoo scoped公変数は、この改封入)

ばなければなりませんでしこれからはどんどん遠ざかっていく:

public function set foo (o:FooObject) : void {
...
}

または

public function get foo() : FooObject {
...
}

ここLiveDocsのインターフェイスのを参照します。それは明らかであろうものをかなりのだ。

引用します:

  

一般的に、イベントディスパッチ機能を得るために、ユーザ定義のクラスのための最も簡単な方法は、のEventDispatcherを拡張することです。

このため、

  

プライベート静的定数emptyLink:のEventDispatcher = {

私は非常に長いためのFlexを使用していない、これはあなたの要件に適合しない場合がありますが、なぜXMLを使用していませんか?私はあなたがXMLで属性へのTextInputテキスト値を設定することができると信じています。

私は擬似コードを使用していますが、このような何かが私には理にかなってます:

[Bindable] private static const currentLink:XML = <root>
                                                    <trigger1 value=""/>
                                                    <trigger2 value="" />
                                                  </root>;
...
<mx:TextInput id="trigger1" width ... text="{currentLink.trigger1.@value}" />

このような何か、おそらく?

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top