Rich приложения, подобные google+, gmail, facebook имеют множество динамически создаваемых элементов управления. Следить за привязкой событий при каждом переходе между интерфейсами может превратиться в ад. Выделять менеджер собитий в отдельный модуль тоже не целесообразно – придется поддерживать список событий в актуальности и со временем этот менеджер стан просто помойкой событий.
<div data-fn="test">Test click</div>
Предлагаю простой вариант ленивой призявки событий к шаблону/интерфейсу одной строчкой:
$.observable({
test: function(){
alert($(this).text()); //Test click
}
});
data аттрибут используется для описания привязываемого события. data-fn – имя метода в объекте events, data-event – тип события, data-type – вариант привязки события, через bind или delegate.
var MainInterface = function() {
this.dom = $('<div></div>');
this.dom.append(
'<div data-fn="say" data-event="click" data-type="delegate" data-word="hello">say hello</div>'
);
this.dom.append(
'<div data-fn="say" data-event="click" data-type="delegate" data-word="world">say world</div>
');
this.dom.observable(this);
this.say = function () {
alert($(this).data('word'));
}
}
var mainInterface = new MainInterface();
mainInterface.dom.appendTo($(document.body));
Какие плюсы мы получаем: Программист пишет чистый код отдельно от верстки, не заботясь об именах классов элементов. Верстка и логика не пересекаются, меняя как угодно дизайн, названия классов, название id элементов мы даем волю дизайнерам и не выясняем почему очередная кнопка отвалилась после изменения дизайна. В качестве шаблонизаторов можно использовать любой движок, любите haml? пожалуйста - добавте data аттрибуты и все события привяжутся автоматом после рендера.
Скачать плагин можно здесь https://github.com/freeart/observable
No comments:
Post a Comment