我有一个GUI的部分类。它是一个切换开关,具有switch
公共成员函数,可将GUI开关置于您想要的任何位置。当您单击GUI元素时,我希望onToggle
事件与GUI一起调用switch
函数。
以下是我的选择(我正在考虑并希望得到您的建议)来实现这一点:
1)创建一个setOnclick
公共成员函数,我的控制器可以使用该函数将事件的触发器分配给元素并处理switch
函数调用。
toggleInstance.setOnclick(function() {
onToggle.fire();
toggleInstance.switch();
})
2)我可以将事件触发和switch
函数调用放在类本身
element.onclick = function() {
onToggle.fire();
public.switch();
}
我认为让GUI类(例如我的切换开关)完全没有任何逻辑或功能会很好,但我不确定这是否有必要。
我没有使用MVC框架,但我喜欢应用MV和C之间分离功能的原则。
你能想到未来这两种方法的任何潜在缺点吗?
答案 0 :(得分:2)
<强> HTML / CSS / JavaScript的:强>
在客户端代码中,您拥有代表您内容的HTML,定义您内容呈现的CSS以及用于确定和分配内容和表现元素行为的JavaScript。
简而言之,你在这里有正确的想法。只需将JavaScript从JavaScript和HTML中移除,就可以在正确规划架构方面做很多工作。
在JavaScript中,您可以关注MVC,但在大多数情况下,只要您记住HTML是内容,JavaScript就是行为,而CSS就是表示,您已经做了很多工作来使您的代码具有高度可维护性。 / p>
话虽如此,让我们专注于您的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是一种平衡,过度架构的东西可能同样笨拙,难以处理,因为它是一种不经常构建不足的东西。
你在考虑这些细节是件好事;如果您知道需要重复使用哪些事件并专注于那些事件,他们将以较低技术债务的形式支付股息。