Сообщение от nerv_
|
kobezzza, у меня возник глупый вопрос: как ты навешиваешь обработчики событий для шаблонизируемых элементов? Через делегирование?
Хочется максимально простого и понятного кода. Допустим, когда я использую ангуляр, я пишу так:
<div ng-repeat="item in array"> <!-- повторить див столько раз, сколько элементов в массие -->
<div ng-click="controller.click(item)"></div> <!-- навесить обработчик клика на каждый элемент -->
</div>
// упрощенный js
var controller = {
click: function(item) {
// item - элемент модели, по кот. кликнули
}
};
можно ли как-нибудь добиться подобного поведения?
Так же хочется услышать/увидеть, как ты навешиваешь обработчики с данным шаблонизатором.
|
Сам шаблонизатор не знает ни про какие событие и прочее, но необходимую логику я задаю через вызовы фильтров или функций внутри шаблона, пример:
{template bButton.prototype.tpl()}
<div class="{this|el 'cont'|elMod 'focus', 'true'}">
</div>
{end}
Тут фильтры el и elMod и т.д. являются часть моего фреймворка который реализует паттерн БЭМ, т.е. это отдельная хреновина не имеющая отношения к шаблонизатору.
Сам Snakeskin - это просто транслятор и микролиба (фильтры + итераторы) и ничего больше.
PS: раз уж тут отметился, то скажу, что в декабре хочу запилить новую версию с поддержкой доопределения блоков и прототипов (сейчас есть только переопределение), т.е. что-то вроде:
{template page()}
{block scripts}
<script src="1"></script>
<script src="2"></script>
{end}
{end}
{template page2() extends page}
{block scripts}
{super} /// будет заменено на block scripts из page
<script src="3"></script>
{end}
{end}
Сейчас похожее можно сделать с помощью миксина из блоков и прототипов, но выглядит это криво.
{template page()}
{proto scripts}
<script src="1"></script>
<script src="2"></script>
{end}
{block scripts}
{apply scripts}
{end}
{end}
{template page2() extends page}
{proto page2_scripts}
<script src="3"></script>
{end}
{block scripts}
{apply scripts}
{apply page2_scripts}
{end}
{end}