2011-03-04 19 views
1

私は、タスクをキャンバスに動的に追加できるシンプルなタスク/カレンダーツールを開発中です。ここでは、基本的にタスクを追加するためだけのキャンバスとボタンでMain.mxml、で定義されている主なアプリケーションです:MXMLクラスの子要素が表示されない

<?xml version="1.0" encoding="utf-8"?> 
<mx:Application xmlns:mx="http://www.adobe.com/2006/mxml"> 
    <mx:Canvas id="MainCanvas" borderStyle="solid" width="300" height="300"> 
     <mx:Button click="CreateTask();" label="create task" /> 
    </mx:Canvas> 
    <mx:Script> 
    <![CDATA[ 
     import Task; 
     private function CreateTask() : void 
     { 
      // create the task object 
      var thisTask:Task = new Task(); 
      // add the task to the canvas 
      var taskUI : DisplayObject = MainCanvas.addChild(thisTask); 
      // position the task ui 
      taskUI.y = 50; 
     } 
    ]]> 
    </mx:Script> 
</mx:Application> 

私は私の仕事は、ラベルとボタンでBorderContainersになりたい、ANに定義されています外部mxmlは、簡単にインスタンス化してMain.mxmlのキャンバスに追加することができます。

<?xml version="1.0" encoding="utf-8"?> 
<s:BorderContainer xmlns:mx="http://www.adobe.com/2006/mxml" xmlns:s="library://ns.adobe.com/flex/spark" cornerRadius="10"> 
    <s:layout> 
     <s:HorizontalLayout/> 
    </s:layout> 
    <s:Label id="NameLabel" text="task name" /> 
    <s:Button label="Button 1"/> 
</s:BorderContainer> 

問題は、私はキャンバスにタスクインスタンスを追加するとき、子供(ボタンとラベル)が表示されないということである。ここではTasks.mxmlです。私は、キャンバスとBorderContainerの両方でcreationPolicy = "all"を設定しようとしましたが、それでも動作しませんでした。私は、クラスが完全に読み込まれる前に、クラスのメンバーにアクセスする際に問題を抱えている人々についての記事をたくさん読んだが、BorderContainerの中にLabelとButtonが表示されているのが見たいだけだ。

ありがとうございました。

+0

Sparkアプリケーションとグループではなく、mxアプリケーションとCanvasを使用する理由はありますか?あなたの問題の一部は、SparkではaddChildではなくaddElementを使用している可能性があると思います。私はmxとSparkのミックスとマッチングを避けようとしています。 – NoobsArePeople2

答えて

0

mxとsparkコントロールを混在させたい場合は、flex 3 mx名前空間から新しい名前空間に移動する必要があります。

ここで新しいMX名前空間(ライブラリ://ns.adobe.com/flex/mx)を使用してmain.mxmlだ、とFXの名前空間は、スクリプトブロックを処理するために追加しました:

<?xml version="1.0" encoding="utf-8"?> 
    <mx: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" > 
    <fx:Script> 
    <![CDATA[ 
     import Task; 
     private function CreateTask() : void 
     { 
      // create the task object 
      var thisTask:Task = new Task(); 
      // add the task to the canvas 
      var taskUI : DisplayObject = MainCanvas.addChild(thisTask); 
      // position the task ui 
      taskUI.y = 50; 
     } 
    ]]> 
    </fx:Script> 
    <mx:Canvas id="MainCanvas" borderStyle="solid" width="300" height="300"> 
     <mx:Button click="CreateTask();" label="create task" /> 
    </mx:Canvas> 
</mx:Application> 

などが、他の人がコメントしたところでは、スパークするためにすべてを移動することができます。そうした場合は、addChildのaddElement呼び出しを必ず変更してください。

+0

ありがとうございます。私はFlexには新しく、Webで見つかった古いコードスニペットを使用していたので、これがちょうど起こったと思います。私はコンポーネントを起動するために全力を入れました。 – Lamprizzle

0

spxコンポーネントをmx:canvasに追加すると、sparkコンポーネントの子を作成するために必要なコードがトリガされないようです。

<?xml version = "1.0" encoding = "utf-8"?> 
<s:BorderContainer 
    xmlns:mx = "http://www.adobe.com/2006/mxml" 
    xmlns:s = "library://ns.adobe.com/flex/spark" 
    cornerRadius = "10" 
    creationComplete = "{addElement(poorUseOfContainers)}"> 

    <s:HGroup id = "poorUseOfContainers" 
     width = "100%" height = "100%"> 
     <s:Label id = "NameLabel" 
      text = "task name" /> 
     <s:Button label = "Button 1" /> 
    </s:HGroup> 

</s:BorderContainer> 
関連する問題