2013/10/14

Flex: 「warning: unable to bind to property...」の対処方法

Flexで「warning: unable to bind to property 'fogefoge' on class 'Object' (class is not an IEventDispatcher)」という警告が出た時の対処を紹介します。

※パート2を追加(10/13/2013)しました

■警告

■対処前ソースコード

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
<?xml version="1.0" encoding="utf-8"?>
<s:View xmlns:fx="http://ns.adobe.com/mxml/2009" 
  xmlns:s="library://ns.adobe.com/flex/spark" title="Normal">
 <s:List width="100%" height="100%">
  <s:dataProvider>
   <s:ArrayList>
    <fx:Object firstName="Taro" lastName="Sato"/>
    <fx:Object firstName="Toshi" lastName="Takeda"/>
    <fx:Object firstName="Miku" lastName="Kishi"/>
    <fx:Object firstName="Ai" lastName="Ito"/>
   </s:ArrayList>
  </s:dataProvider>
  <s:itemRenderer>
   <fx:Component>
    <s:ItemRenderer>
     <s:HGroup>
      <s:Label text="{data.firstName}"/>
      <s:Label text="{data.lastName}"/>
     </s:HGroup>
    </s:ItemRenderer>
   </fx:Component>
  </s:itemRenderer>
 </s:List>
</s:View>


一見、ソースを見る限り問題無さそうなのですが、データバインディングがうまくいっていないため警告がでます。

対処方法: ItemRendererの「set data」functionをoverrideしてやることで対処します。

■対処後ソースコード

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
<?xml version="1.0" encoding="utf-8"?>
<s:View xmlns:fx="http://ns.adobe.com/mxml/2009" 
  xmlns:s="library://ns.adobe.com/flex/spark" title="Normal">
 <s:List width="100%" height="100%">
  <s:dataProvider>
   <s:ArrayList>
    <fx:Object firstName="Taro" lastName="Sato"/>
    <fx:Object firstName="Toshi" lastName="Takeda"/>
    <fx:Object firstName="Miku" lastName="Kishi"/>
    <fx:Object firstName="Ai" lastName="Ito"/>
   </s:ArrayList>
  </s:dataProvider>
  <s:itemRenderer>
   <fx:Component>
    <s:ItemRenderer>
     <fx:Script>
      <![CDATA[
       override public function set data(value:Object):void {
        lblFirstName.text = value.firstName;
        lblLastName.text = value.lastName;
       }
      ]]>
     </fx:Script>
     <s:HGroup>
      <s:Label id="lblFirstName"/>
      <s:Label id="lblLastName"/>
     </s:HGroup>
    </s:ItemRenderer>
   </fx:Component>
  </s:itemRenderer>
 </s:List>
</s:View>

これで警告が消えました。イェーイ!

http://flexponential.com/2009/11/11/binding-warnings-when-using-object-in-a-list-dataprovider/

0 件のコメント:

コメントを投稿