0

私を助けたい人にこんにちは。

この例を実装しようとしています: http://ramblingdeveloper.com/ramblings/2011/9/24/creating-a-flex-spark-list-of-checkbox-bound-to-xml-dataprov.html

私の例は、それに応じてコード全体を変更したいくつかの小さな違いを除いて、かなり同じです。

私の MXML アプリケーション:

<?xml version="1.0" encoding="utf-8"?>
<s:Application xmlns:fx="http://ns.adobe.com/mxml/2009" 
           xmlns:s="library://ns.adobe.com/flex/spark" 
           xmlns:mx="library://ns.adobe.com/flex/mx" minWidth="955" minHeight="600">
<fx:Declarations>
<fx:XML format="e4x" id="namesXML">
    <people>
        <person>
            <name>Leon</name>
        </person>
        <person>
            <name>Mathilda</name>
        </person>
        <person>
            <name>Stansfield</name>
        </person>
        <person>
            <name>Benny</name>
        </person>
    </people>
</fx:XML>
    <!-- Place non-visual elements (e.g., services, value objects) here -->
</fx:Declarations>
<fx:Script>
    <![CDATA[
        import mx.collections.XMLListCollection;

        var temp:XMLListCollection = new XMLListCollection(namesXML.children());
    ]]>
</fx:Script>
<s:List itemRenderer="CheckBoxItemRenderer"
        dataProvider="{temp}"/>

と私の MXML ItemRenderer:

<?xml version="1.0" encoding="utf-8"?>
<s:ItemRenderer xmlns:fx="http://ns.adobe.com/mxml/2009" 
            xmlns:s="library://ns.adobe.com/flex/spark" 
            xmlns:mx="library://ns.adobe.com/flex/mx" 
            autoDrawBackground="true">

<s:CheckBox label="{data.person.name}"/>

</s:ItemRenderer>

Null オブジェクト参照を取得し続け、問題があると思われる場所をいじっています。

<s:CheckBox label="{data.person.name}"/>

これが私の XML データへのアクセス方法ですが、XML と XML トラバーサルは私の強みではないため、100% 確信はありません。私が座ってブレークスルーのために微調整を続けている間、小さな洞察が役立ちます.

編集: ItemRenderer コードを修正し、終了タグがありませんでした。編集 #2: 私の ItemRenderer ファイルの名前は、例のように CheckBoxItemRenderer です。

4

2 に答える 2

0

これは完全な答えではありません。しかし、コメントするには大きすぎます。デバッグに役立ちます。ItemRenderer で Binding を使用する代わりに、dataChange イベントを使用します。

<s:ItemRenderer xmlns:fx="http://ns.adobe.com/mxml/2009" 
            xmlns:s="library://ns.adobe.com/flex/spark" 
            xmlns:mx="library://ns.adobe.com/flex/mx" 
            autoDrawBackground="true" dataChange="onDataChange()>

<fx:Script>
<[[
 protected function onDataChange():void{
   // if data isn't defined; just perform a return here
   if(!data){ return }
   // try a lot of traces to see what comes out
   trace(data);
   trace(data.name);
   trace(data.person);
   trace(data.person.name);
   // etc.,. etc..
   var checkBoxLabel :String = data.person.name;
   check.label = checkBoxLabel;
 }
]]>
</fx:Script>

<s:CheckBox id="check" />

</s:ItemRenderer>

私も XML 解析の専門家ではありません。Flash Builder デバッグ パネルの監視変数が一貫していないか、XML へのドリルダウンに役立たないことがわかりました。そのため、トレース ステートメントが最適です。

私が推測しなければならなかった場合; 次のように、データは 1 人の人物と同じです。

<person>
    <name>Benny</name>
</person>

したがって、data.person を実行するのはおそらく冗長であり、ドリルダウンを試みすぎて null 値になります。data.name の可能性が高いようです。私の心の中で。

于 2013-05-03T17:37:32.697 に答える