Тема: Snakeskin
Показать сообщение отдельно
  #51 (permalink)  
Старый 28.11.2013, 16:47
Аватар для kobezzza
Быдлокодер;)
Отправить личное сообщение для kobezzza Посмотреть профиль Найти все сообщения от kobezzza
 
Регистрация: 19.11.2010
Сообщений: 4,338

Сообщение от 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}
__________________
kobezzza
code monkey

Последний раз редактировалось kobezzza, 28.11.2013 в 18:54.
Ответить с цитированием