0

我已經閱讀過,Views和Controllers應該互不可見。視圖和控制器彼此不可見?怎麼會這樣?

控制器如何監聽UI視圖中的按鈕點擊?

當然,控制器需要知道添加事件監聽器的視圖 UI視圖需要調用控制器中的函數或將事件分派給控制器。

+0

這是常見的使用靜態調度類這種情況下 – www0z0k 2011-03-18 14:07:50

+0

啊我看...如果我理解正確的是。所以對於每個視圖你有一個特定的靜態調度器,所有的各種UI選項,由視圖UI觸發?由控制器或調解器進行監聽? – davivid 2011-03-18 14:39:34

+0

我目前的mvc不是那麼純粹^^我們使用靜態的'EventDispatcher'實例,因此可以廣播一個事件,無論它在哪裏都可以被任何訂閱的實例聽到。然而,對於像'PlayerModel.health改變 - >更新PlayerHealthBar.value'這樣的東西,使用'[Bindable]'是一種更好的做法 – www0z0k 2011-03-18 16:34:09

回答

0

我的MVC的唯一的經驗是與使用Robotlegs的框架,所以我會使用這個框架時

我的意見只能使用原生的Flash事件這是在聽了(MouseEvent.CLICK等)儘量說明我的方法調解員的觀點。當介體接收到本地事件時,它將發送一個特定於應用程序的事件,例如LoginEvent.LOGIN,該事件可以被映射,然後使用上下文中的命令映射發出命令。

很抱歉,如果這沒有多大意義,但基本上你的視圖會觸發本機事件,你的中介將監聽這些本機事件,然後觸發應用程序特定的事件,然後運行你的命令。你使用中介作爲你的觀點的「耳朵」,並保留任何邏輯。應用程序上下文允許您在發生某些事件時觸發命令,以便您的視圖和命令分離。

+0

我想我明白了 - 但是點擊監聽器如何區分不同的UI元素呢?你使用類似e.target.name(login_btn,logout_btn等)? – davivid 2011-03-18 14:33:27

+0

如果在視圖中有三個按鈕,則可以爲每個按鈕啓動一個不同的自定義事件,並在中介中偵聽這些事件,或者可以檢查medator中本地flash事件的有效負載,以決定您想要執行的操作它。 – redHouse71 2011-03-18 14:50:01

+0

使用本地事件的好處是,您可以將視圖用於另一個項目,而不必更改任何自定義事件,對於任何特定於項目的事件而言,您的視圖是「愚蠢的」,只能處理本地事件。你的中介是唯一與這個特定項目相關的東西。對不起可能不是最好的解釋。 – redHouse71 2011-03-18 15:01:54