2012-05-19 46 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

相关问题