2012-05-19 3 views
1

У меня есть класс для части графического интерфейса. Это тумблер, который имеет функцию открытого участника switch, которая переводит переключатель GUI в нужное положение. Когда вы нажимаете элемент GUI, мне бы хотелось, чтобы событие onToggle было запущено вместе с графическим интерфейсом, вызывающим функцию 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

+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

Смежные вопросы