2010-08-12 69 views
6

您可以推薦關於設計Flex應用程序的文章,書籍和最佳實踐嗎? (AIR和網頁)。我已閱讀Creating components and enforcing separation of concerns with FlexBuilding components by using code behindFlex:如何讓代碼遠離MXML

應用程序是否始終必須在主MXML上啓動?我不能從ActionScript類實例化第一個視圖嗎?

你會如何添加一個處理程序到第一個MXML,並給它的流量控制?

我想在我的MXML文件上寫零代碼以保持視圖與代碼分離。這在Flex中可能嗎?

+0

你是出於意識形態的原因還是因爲你真的相信有實質性的好處盡力去避免簡單的權宜之計妥協這樣做呢? – Robusto 2010-08-12 13:48:11

+0

大多數是一般性問題,可以幫助我通過Flex GUI編程指導自己。我被教導保持代碼解耦的觀點是好的。 – 2010-08-12 13:51:31

回答

10

我已經參與了一些使用了代碼隱藏模式的項目,這些項目符合您的許多要求。簡而言之,通過創建ActionScript基類(MyClassCode.as),然後創建一個從您的代碼隱藏類(MyClass.mxml)繼承的MXML文件,將代碼與MXML分離。一個缺點是MXML文件中的任何UI元素需要在代碼隱藏類中第二次聲明,否則我發現這是從UI分離代碼的非常有效的方法。下面是一個例子,更多信息一些鏈接:

MyClassCode.as:

package mypackage 
{ 
    import flash.events.MouseEvent; 

    import mx.events.FlexEvent; 

    import spark.components.Button; 
    import spark.components.Group; 

    public class MyClassCode extends Group 
    { 
     public var myButton:Button; 

     public function MyClassCode() 
     { 
      super(); 
      this.addEventListener(FlexEvent.CREATION_COMPLETE, onCreationComplete); 
     } 

     private function onCreationComplete(e:FlexEvent):void { 
      this.removeEventListener(FlexEvent.CREATION_COMPLETE, onCreationComplete); 
      myButton.addEventListener(MouseEvent.CLICK, onClick); 
     } 

     private function onClick(e:MouseEvent):void { 
      // Do something 
     } 
    } 
} 

MyClass.mxml:

<?xml version="1.0" encoding="utf-8"?> 
<mypackage:MyClassCode xmlns:fx="http://ns.adobe.com/mxml/2009" 
         xmlns:s="library://ns.adobe.com/flex/spark" 
         xmlns:mx="library://ns.adobe.com/flex/mx" 
         xmlns:mypackage="mypackage.*"> 
    <s:Button id="myButton"/> 
</mypackage:MyClassCode> 

一些鏈接:

http://learn.adobe.com/wiki/display/Flex/Code+Behind

http://ted.onflash.org/2007/02/code-behind-in-flex-2.php

http://blog.vivisectingmedia.com/2008/04/the-flex-code-behind-pattern/

+0

這是我通常做的事情。 – danjarvis 2010-08-12 15:36:21

+0

「簡而言之」的句子讓我有一天的時光。我會繼續閱讀和編寫這些以及我在這個主題上收集到的其他幾個鏈接。更多問題將發佈到SO。 謝謝! – 2010-08-12 20:00:49

+0

太棒了,很高興我能幫到你! – 2010-08-12 20:55:49

1

Paul Williams有一些很棒的文章和關於Flex的不同表現模式的例子。他甚至使用每種不同的模式構建了一個示例應用程序,並展示瞭如何對某些模式進行單元測試。 http://blogs.adobe.com/paulw/

看一看被動視圖模型,它可能是你在你的MXML AS代碼編寫任何方面尋找。

+0

非常好的資源,謝謝! – 2010-08-12 20:00:21

2

最佳實踐在軟件開發中非常主觀。如果你找到一個說「X」的人,我可以找到另一個說「Y」的人,並且他們很可能在特定情況下都是正確的。

我知道大多數書籍着重於爲初學者提供速度,而不是最佳實踐。

爲了回答您的具體問題:

應用程序是否總是要 開始在主MXML?我不能 實例化來自 ActionScript類的第一個視圖嗎?

從理論上來看,似乎主應用程序文件應該是ActionSCript;畢竟Flex編譯器只是將MXM轉換爲ActionSCript。在實踐中,我從來沒有見過任何人這樣做。我看到除了主應用程序文件中的應用程序標籤之外的所有應用程序都是ACtionSCript。

你會如何處理程序添加到 第一MXML,並給予流量控制 呢?

你是什麼意思的處理程序和流量控制?我不確定我在這裏有具體的答案。很多人使用框架。 Cairngorm是使用最廣泛的,但有些人覺得它過於複雜。有一段時間,馬特是社區的最愛。 RobotLegs是當前的最愛。

我想在我的 MXML文件寫入零代碼保持視圖脫鉤代碼 。這在Flex中可能嗎?

這取決於。視圖還不是代碼?如果你想使用「模型視圖控制器」風格的方法,有很多方法。框架可以幫助,我在上面提到了一些。但是,你也可以自己去做。如果您是Flex新手,我建議您開始「無框架」開發,並將框架帶入方程式,以查看它們是否有助於解決遇到的問題。