画像のレイヤーが「リスト」フレックスコンポーネントにリストされているAir/Flexで簡単なプログラムを作成しています。アイデアは、ユーザーがリスト内のエントリをドラッグ、クリック、ダブルクリックなどしてレイヤーを編集できることです。
ただし、AS3 および Flex コンポーネントでイベント バインディングがどのように機能するかは、まだ完全には把握できていないようです。ダブルクリックしたときに、リスト内の1つのエントリのラベルをトレースするプログラムを取得しようとしました。3 つに 1 つのエントリで機能しますが、他のエントリは参照エラー #1069 を返します。以下は、レイヤークラスの関連コードです。
レイヤー パネルとリストの宣言:
<s:Panel x="10" y="29" width="276" height="261" id="newlevel" title="Background layers">
<s:List id="layers" x="10" y="41" width="254" height="143" dragEnabled="true" dragMoveEnabled="true" dataProvider="{layerlist}"
dropEnabled="true" dragComplete="layers_dragCompleteHandler(event)" doubleClickEnabled="true" doubleClick="layers_doubleClickHandler(event)" keyDown="layers_keyDownHandler(event)">
</s:List>
<s:Button x = "94" y = "192" width="86" height="26" label="OK" click="ok_clickHandler(event)" />
<s:Label x="10" y="10" width="254" height="33" text="Click and drag to reorder, rename and delete layers"/>
</s:Panel>
「layerlist」を定義し、そこにいくつかのテスト値を追加するスクリプト:
//list of layers in scene. Used in layer list for re-ordering and editing.
public var layerlist:ArrayCollection = new ArrayCollection(
[{label: "asd", price: "dsfdf"}]);
--
layerlist.addItem({label: "canoe", price: "dsfdf"});
layerlist.addItem({label: "coyote", price: "dsfdf"});
そして最後に、ダブルクリックのイベントハンドラー:
protected function layers_doubleClickHandler(event:MouseEvent):void
{
// user doubleclicked so rename this layer
trace("doubleclick");
trace(event.target.label);
}
ユーザーがリストの 1 つのエントリをクリックすると、それが "layerlist" からのエントリであるかを知る必要があります。event.target は正しいアイテムを指すと思っていましたが、明らかにそう簡単ではありませんでした。ボタン付きのツールバーを作成し、event.labelを使用してユーザーが押したボタンを見つける前に、この状況では機能しません。
私は何をすべきか?