JBlocks — небольшой jQuery-плагин (~100 строк) для организации компонентов на странице.
Строится на трех основных принципах:
Если вам интересна тема декларативного javascript — прошу под кат.
Пусть у нас есть простой контрол: счетчик. Шаг счетчика — параметр, который можно менять для разных экземпляров.
Демо
Объявим новый компонент counter:
Разметим в html компонент с помощью специальных атрибутов:
Компоненты можно инициализировать с помощью $.fn.jblocks('init') и уничтожать с помощью $.fn.jblocks('destroy'):
С помощью функции $.fn.jblocks('get') можно получать ссылки на экземпляры. Если компонент еще не был инициализирован, то сперва это будет сделано.
UPD:
Спасибо всем за конструктивную критику (и даже один пул реквест). Обновил репозиторий и описание статьи в соответствии с новым АПИ.
UPD:
Как правильно заметил GIum, это не «нано» пока зависит от jQuery. Теперь это реально несколько сотен строк vanillajs :)
Строится на трех основных принципах:
- опиши поведение компонента в декларации;
- разметь компонент в html с помощью специальных атрибутов;
- общайся со экземплярами компонента через АПИ.
Если вам интересна тема декларативного javascript — прошу под кат.
Пусть у нас есть простой контрол: счетчик. Шаг счетчика — параметр, который можно менять для разных экземпляров.
Демо
Объявим новый компонент counter:
$.jblocks({
// имя компонента
name: 'counter',
// декларация событий
events: {
// встроенные события: b-inited, b-destroyed
'b-inited': 'oninit',
// дом-события
'click .js-inc': 'onClickPlus',
'click .js-dec': 'onClickMinus'
},
// методы компонента
methods: {
oninit: function() {
this.$info = this.$node.find('.js-info');
this.count = 0;
},
/**
* Обработчик клика на плюс
*/
onClickPlus: function() {
this.inc();
this.update();
},
/**
* Обработчик клика на минус
*/
onClickMinus: function() {
this.dec();
this.update();
},
/**
* Увеличить счетчик
*/
inc: function() {
this.count += this.params.step;
},
/**
* Уменьшить счетчик
*/
dec: function() {
this.count -= this.params.step;
},
/**
* Нарисовать новое значение
*/
update: function() {
this.$info.text(this.count);
}
}
});
Разметим в html компонент с помощью специальных атрибутов:
<div class="foo" data-b="сounter" data-p='{ "step": 2 }'>
...
</div>
- data-b — айдишник блока (имя)
- data-p — параметры блока
Компоненты можно инициализировать с помощью $.fn.jblocks('init') и уничтожать с помощью $.fn.jblocks('destroy'):
// Инициализируем все блоки в документе
$(document).jblocks('init');
// Уничтожаем все блоки в документе
$(document).jblocks('destroy');
// Или внутри конретной части DOM-дерева
$('#app').jblocks('init');
С помощью функции $.fn.jblocks('get') можно получать ссылки на экземпляры. Если компонент еще не был инициализирован, то сперва это будет сделано.
$('.foo').jblocks('get').each(function() {
// this - экземпляр блока, inc — его метод
this.inc();
});
UPD:
Спасибо всем за конструктивную критику (и даже один пул реквест). Обновил репозиторий и описание статьи в соответствии с новым АПИ.
UPD:
Как правильно заметил GIum, это не «нано» пока зависит от jQuery. Теперь это реально несколько сотен строк vanillajs :)