Flex 4/AS3 で次のようにコーディングしましたが、期待どおりに動作しません。
だから、私のコードに何か問題があるかどうか知りたいです...私はそれを説明します:
TileTest.mxml
<s:Application minWidth="955" minHeight="600" creationComplete="createButtons()"
<fx:Script>
<![CDATA[
import Object.TestButton;
import mx.collections.ArrayList;
private var _names:Array = ["one", "two", "three"];
public function createButtons():void
{
var buttons:ArrayList = new ArrayList();
for(var a:int = 0; a < _names.length; a++)
{
var testButton:TestButton = new TestButton();
testButton.customName = _names[a];
buttons.addItem(testButton);
}
myList.dataProvider = buttons;
}
]]>
</fx:Script>
<s:VGroup gap="12" width="100%">
<s:Label text="Options" fontSize="18" fontWeight="bold" color="#333333" />
<s:List width="100%" height="100%" id="myList" itemRenderer="Object.TestButton" borderVisible="false">
<s:layout>
<s:TileLayout orientation="rows" columnWidth="290" rowHeight="90" columnAlign="left" horizontalGap="0" verticalGap="0" />
</s:layout>
</s:List>
</s:VGroup>
</s:Application>
これは私のアプリケーションです。ここでは、いくつかの TestButton をロードする myList というリストがあります。ループ内の各ボタンに名前を設定します。
テストボタン
<s:Group width="300" height="90" click="{ Alert.show(_name); }"
<fx:Script>
<![CDATA[
import mx.controls.Alert;
private var _name:String = "just a test...";
public function set customName(newName:String):void
{
_name = newName;
Alert.show(_name);
this.addEventListener(MouseEvent.MOUSE_OVER, function():void{ Alert.show(_name); });
}
]]>
</fx:Script>
<s:BorderContainer accentColor="#000000" width="100%" height="100%" />
</s:Group>
ご覧のとおり、このコンポーネントには 3 つのアラートがあります...問題を理解できるようにしました。
すでに示したように、アプリケーションで発生する customName を設定すると、最初のアラートが発生します。
イベント リスナーが Group 要素に追加されているため、2 番目のイベントは Mouse_Over で発生するはずです。
そして 3 番目のアラートは、グループ要素のクリックで発生するはずです。
ここで、結果の swf を実行すると、画面に 3 つのボタンがすべて表示され、アプリケーションによって設定された customName ごとに 1 つずつ、3 つのアラートが表示され、正しい名前がアラートされます。
マウスをボタンの上に置いても、メッセージは表示されません。
任意のボタンをクリックすると、_nameプロパティに設定されたデフォルトのメッセージが警告されます。これは「ただのテストです...」
アプリケーションによって各ボタンに設定された名前を常に警告することを期待していたので、何が問題なのか理解できません。また、コンポーネントを変更したくありません...私が言いたいのは、内部にプライベート文字列を持つリストとテストボタンが欲しいということです。
問題がこれらの特定の実装にある場合は、変更するしかありません...
皆さん、ありがとうございました!