2012-05-19 41 views
1

我有一個類的一部分的GUI。它是一個具有switch公共成員函數的切換開關,可將GUI開關置於任何您想要的位置。當你點擊GUI元素時,我想要一個onToggle事件伴隨着調用switch函數的GUI而被觸發。視圖是否應該引發事件?

這裏是我的選擇(即我在考慮,想你的意見)來實現這一點:

1)讓我的控制器可以使用事件觸發分配到一個setOnclick公共成員函數元素並負責switch函數調用。

toggleInstance.setOnclick(function() { 
    onToggle.fire(); 
    toggleInstance.switch(); 
}) 

2)我可以把類本身

element.onclick = function() { 
    onToggle.fire(); 
    public.switch(); 
} 

我認爲這將是不錯的GUI類(內部事件觸發和switch函數調用,如我的撥動開關)完全沒有任何邏輯或功能,但我不確定這是否有必要。

我不使用MVC框架,但我不喜歡MV和C.

之間的分離功能的

你能想到的任何潛在的不利因素的原則也適用於未來的兩種方法?

+0

+1很好的問題! – jmort253

回答

2

HTML/CSS/JavaScript的:

在客戶端的代碼,你有HTML,表示您的內容,CSS定義您的內容的呈現,和JavaScript,您可以使用它確定和分配行爲的內容和表達元素。

總之,您在這裏有正確的想法。只要將JavaScript從HTML和HTML中排除出JavaScript,就可以在架構的適當規劃方面做出很多努力。

在JavaScript中,您可以遵循MVC,但大多數情況下,只要您記得HTML是內容,JavaScript就是行爲,而CSS就是演示文稿,您已經做了很多事情來使代碼具有高度可維護性。

就這麼說吧,讓我們專注於你的JavaScript。

MVC:

雖然我認爲自己有正確的想法你的第一個例子功能可能不會被命名爲完全正確。當我想到「setOnclick」時,我認爲你正在設置onclick事件,而不是觸發onclick事件。

因此,我拍下這一刻:

// reuse this same function to bind that same event to other similar buttons 
toggleInstance.setOnclick(function(element) { 

    element.onclick = function() { 
     onToggle.fire(); 
     public.switch(); 
    } 
}); 

如果你需要一個以上的控制重複這種情況下,你可以只是簡單的在傳遞元素和相同的單擊處理程序綁定到它。

你可以把它更進一步,在一個單獨的函數定義實際的事件處理程序

// event handler is now named, so it can be easily reused 
toggleSwitch: function() { 
    onToggle.fire(); 
    public.switch(); 
} 

toggleInstance.setOnclick(function(element) { 

    // bind the event to the element passed in 
    element.onclick = toggleInstance.toggleSwitch; 
}); 

我唯一的建議是要小心,不要過度建築師。MVC是一個平衡點,而過度架構的東西可能會很笨重,並且難以用作不經意的架構。

很好,你正在考慮這些細節;如果您知道需要重新使用哪些事件並專注於這些事件,他們將以較低的技術債務的形式支付股息。

+0

感謝您的意見。你是對的第一個例子。我複製並粘貼(從內存),所以它是脫節的。 – tau

相關問題