2010-10-05 66 views
1

我有一個架構/邏輯問題。這是我想達到的:Flex的總體結構/邏輯的建議需要

  • a)我的主要 應用程序中有三個按鈕。
  • B)當你點擊任何按鈕 的,一個TitleWindow中打開基於 海關組件。
  • c)在 titleWindow正在爲是/否選擇器。
  • d) 如果答案是「是」,那麼我想 將在主應用程序中點擊的按鈕 的顏色更改爲 紅色。如果答案爲「否」,則 主應用程序中的按鈕不會發生任何變化。

我的問題是什麼是最好/最簡單的方法來「記住」哪個按鈕被點擊並處理是/否問題。

解決方案:

  • 一)請用 按鈕被點擊主 應用程序,id的變量,並在 分量的公共變量設置爲ID

  • b)然後在 組件中處理是/否 問題的自定義事件。自定義事件將使用 按鈕ID作爲參數,併發送 這回主應用程序。

有沒有更好/更簡單的方法來做到這一點?我是否正確接近?將按鈕ID「發送」到組件中然後再次退出是否有意義?

謝謝。

-Laxmidi

回答

1

我寧願在主應用程序中的lastClickedButton私有變量,並將其設置每當按下其中一個按鈕。當單擊「是」按鈕時,TitleWindow組件將分派主應用程序將偵聽的正常事件(具有適當的事件類型,如YES_CLICKED)。從事件處理程序中設置lastClickedButton的顏色。

想法是,哪個按鈕被點擊是一個只與主應用程序有關的信息 - TitleWindow組件與它無關。當我們將按鈕id傳遞給TitleWindow時,我們不必要地創建了對主應用程序的依賴。如果將來你想重用TitleWindow組件來達到其他目的,這個按鈕id變量將在那裏變得毫無意義。

+0

嗨Amarghosh,謝謝你的幫助。我會遵循你的建議。您的解決方案非常簡單。你說得對,哪個按鈕被點擊只與主應用程序相關。謝謝。 – Laxmidi 2010-10-05 16:30:57

1

看看這個命令模式。

當按鈕被按下時,傳遞一個引用到點擊該命令的按鈕。

如果你正在使用Spring作爲,這樣的事情...

<mx:Button id="myButton1" click="EventBus.dispatchEvent(new CommandEvent('testButton', myButton1))" /> 

在命令中,扔了你的對話,處理響應和設置樣式的引用您在傳遞的按鈕。

這樣可以使你從UI做什麼邏輯組件本身(它甚至不需要是一個按鈕,該命令可以採用UIComponent)。

它也不會在你的應用程序周圍留下狀態,比如最後點擊了哪個按鈕/ etc,因爲你正在執行的邏輯塊的所有狀態都封裝在命令中。

命令的簡要僞

public class TestUICommand implements Command, RequiresContext { 
    private var _context : UIComponent; 
    private var _dialog : MyDialog; 

    // Your command controller would set the reference to the button here. 
    public function set context(cxt : UIComponent) : void { 
     _context = cxt; 
    } 

    public function execute() : * { 
     _dialog = new MyDialog(); 
     _dialog.popup(); 
     _dialog.addEventListener("yes", doYes); 
     _dialog.addEventListener("no", closeDialog); 
    } 

    private function doYes(event : Event = null) : void { 
     _context.setStyle("color", 0xFF0000); 
     closeDialog(); 
    } 

    private function closeDialog(event : Event = null) : void { 
     _dialog.close(); 
    } 
} 
+0

格雷戈爾基迪,謝謝你的幫助。不幸的是,我是新手,所以我沒有使用倒置控制框架。我必須更多地研究你的解決方案。再次感謝您花時間幫助我。 – Laxmidi 2010-10-05 16:35:35

+0

這樣做(沒有框架)的低保真方式將讓你的點擊處理程序做var myCommand = new TestUICommand(); myCommand.context = event.target; myCommand.execute();這將會產生幾乎相同的效果,並且仍然保持良好的分離。 – 2010-10-05 16:41:26

1

你可以沒有很多編碼做到這一點很容易。假設你有一個不同的TitleWindow爲你想要變成紅色的每個按鈕顯示,你可以使「想要變成紅色」按鈕將他們的styleName從每個標題窗口中單擊按鈕的切換狀態中斷開。當然,您必須將TW按鈕的切換屬性設置爲true =,然後獲取其所選屬性。

例子:

<mx:Button styleName="{titleWindow_01.yesButton.selected ? 'redStyle' : 'plainStyle'}" text="Blah"/> 

而在你的TitleWindow中

<mx:Button id="yesButton" toggle="true" text="Yes"/> 

這些按鈕會明顯有其他屬性,但是這給你的,這是多麼容易沒有做一個最基本的想法很多編碼。綁定會自動發生,所以你甚至不需要擔心這一點。

+0

嗨Robusto,謝謝你的建議。 – Laxmidi 2010-10-05 16:26:38