2012-05-31 45 views
0

我試圖找出了正確的方法使用Flash Builder在移動應用「代碼背後」代碼:Flash Builder的4.6 - 背後的辦法

  1. 我創建Flex移動AIR項目(基於在「標籤視圖」模板)
  2. 設置我的UI設計模式
  3. 現在我希望所有的邏輯是在一個單獨的類,這將改變UI外觀相應

聽起來很容易,但是我不能真正得到這種方法做這件事,任何幫助表示讚賞:)

更新:

主要應用:

<?xml version="1.0" encoding="utf-8"?> 
<s:TabbedViewNavigatorApplication xmlns:fx="http://ns.adobe.com/mxml/2009" 
            xmlns:s="library://ns.adobe.com/flex/spark" applicationDPI="160"> 
    <s:ViewNavigator label="a" width="100%" height="100%" firstView="views.aView"/> 
    <s:ViewNavigator label="b" width="100%" height="100%" firstView="views.bView"/> 
    <fx:Declarations> 
     <!-- Place non-visual elements (e.g., services, value objects) here --> 
    </fx:Declarations> 
</s:TabbedViewNavigatorApplication> 

視圖答:

<?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="a"> 
    <fx:Declarations> 
     <!-- Place non-visual elements (e.g., services, value objects) here --> 
    </fx:Declarations> 
    <s:Label id="txt" x="280" y="139" text="Label"/> 
</s:View> 

所以現在我想MyClass的改變TXT textField根據我的邏輯,什麼是正確的方法?

+0

我知道你想分開你的AS3代碼和MXML代碼,是否正確?您將無法使用設計模式進行此操作。 – JeffryHouser

+0

我想你可能會對使用代碼背後感到困惑......或者我對你想要做的兩件事情感到困惑:)。通常情況下,您會將數據傳遞到視圖中,並且可以將視圖設置爲適當地響應分配給它的數據。這不需要代碼。如果你想在每個視圖之間共享邏輯,你可以爲這兩個視圖創建一個通用的基類(在某種意義上「代碼隱藏」),你也可以在一個單獨的「工具」類上使用靜態方法。有許多可能的方法。 – shaunhusain

回答

0

一個優雅的方式是實現IMXMLObject。當實現這個接口時,IMXMLObject#initialize方法將把組件(命名爲Object類型的文檔)和一個可選的id(類型爲String)作爲參數,並且你可以很容易地實現這個模式。最大的好處是,你用的組合物在繼承和使用接口時,你可以用它作爲某種類型的保存混合式的瀏覽方式:

package net.icodeapp.examples.views 
    { 
     import flash.events.MouseEvent; 

     import mx.core.IMXMLObject; 
     import mx.events.FlexEvent; 

     public class ViewBaseModel implements IMXMLObject 
     { 
     //------------------------------------------------------------------------- 
     // 
     //   Properties 
     // 
     //------------------------------------------------------------------------- 

     private var _id:String; 

     private var _viewBase:ViewBase; 

     protected function set viewBase(value:ViewBase):void 
     { 
      _viewBase = value; 

      if (!_viewBase) 
      throw new ArgumentError('View must be instance of ViewBase'); 

      if (!_viewBase.initialized) 
      _viewBase.addEventListener(FlexEvent.CREATION_COMPLETE, viewBase_creationCompleteHandler, false, 0, true); 
      else 
      viewCreationCompleted(); 
     } 

     //------------------------------------------------------------------------- 
     // 
     //   Constructor 
     // 
     //------------------------------------------------------------------------- 

     public function ViewBaseModel() 
     { 
     } 

     //------------------------------------------------------------------------- 
     // 
     //   Methods 
     // 
     //------------------------------------------------------------------------- 

     public function initialized(document:Object, id:String):void 
     { 
      viewBase = document as ViewBase; 
      _id = id; 
     } 

     private function viewCreationCompleted():void 
     { 
      _viewBase.addEventListener(MouseEvent.CLICK, viewBase_clickHandler); 
     } 

     //------------------------------------------------------------------------- 
     // 
     //   Event Handler 
     // 
     //------------------------------------------------------------------------- 

     private function viewBase_creationCompleteHandler(event:FlexEvent):void 
     { 
      viewCreationCompleted(); 
     } 

     private function viewBase_clickHandler(event:MouseEvent):void 
     { 
      // todo: do some action 
     } 
     } 
    } 

模型進行初始化和引用進行設置框架。當您看到生成的ActionScript代碼時,您會看到,在模型實例化後,IMXMLObject#初始化它在構造函數中調用。

<?xml version="1.0"?> 
    <s:Group xmlns:fx="http://ns.adobe.com/mxml/2009" xmlns:s="library://ns.adobe.com/flex/spark" 
       xmlns:views="net.icodeapp.examples.views.*"> 
     <fx:Declarations> 
     <views:ViewBaseModel/> 
     </fx:Declarations> 
    </s:Group> 

該模型將按事件接收視圖,並可以調用它的方法。

0

你所要做的就是創建一個AS文件,該文件具有與最初設置的MXML對象相同的基類,例如,如果它是VGroup make MyBaseClass extends VGroup,然後將VGroup更改爲MyBaseClass。

[Main.mxml]

<main:MainBase 
    xmlns:main="*" 
    ...> 
</main:MainBase> 

[MainBase.as]

public class MainBase extends Application 
+0

另外,我建議不要使用設計模式,將粗糙的東西扔在一起很好,但如果你不瞭解底層佈局,就很難在設計模式下做所有事情並使其適當地縮放,這就是除非你不關心縮放。 – shaunhusain

+0

感謝您的回覆,但這是否意味着我將不得不在我的MainBase中聲明所有MXML元素以獲得參考? –

+1

是的,我不是這種方法的最大粉絲,但它確實有效。 – shaunhusain

0

代碼的思考背後作爲基類(或Abstract Class)。在抽象類中,實際實現方法或屬性後面的「真實對象」留給擴展類提供是非常普遍的。

這與您在Flash中將基類設置爲您的自定義類時所做的完全相同,但實際成員對象(按鈕等)在其庫實例鏈接到您的影片剪輯的舞臺上提供夾。

欲瞭解更多關於代碼的信息,請查看我的blog post here.如果您想查看此處描述的模板組件的代碼,請撥打look here。儘管模板組件在Spark世界(IMO)中用處不大。

+0

感謝您的信息,我會看看:-) –