Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Унификация событий #160

Closed
shirokoff opened this issue Jan 21, 2014 · 18 comments
Closed

Унификация событий #160

shirokoff opened this issue Jan 21, 2014 · 18 comments

Comments

@shirokoff
Copy link
Contributor

Столкнулся с тем, что в nb у каждого элемента свои персональные события. Например, фокус на инпуте триггерит событие 'nb-input_focused'.

Чего мне хочется:

  • Все блоки должны триггерить одинаковые события
  • Названия соыбтий должны быть как в DOM с приставкой nb-. В данном случае nb-focus.

Таким образом не надо будет думать, какого вида у нас элемент. И можно будет делать что-то типа

nBlocks.forEach(function(){
    this.on('nb-focus', function(){
        alert(this.getValue());
    });
})
@pmyagkov
Copy link
Contributor

Добавлю, что такой подход на один шаг приблизит нас к правильному использованию делегирования в наноостровах.

@shirokoff
Copy link
Contributor Author

@maksimr
Copy link
Contributor

maksimr commented Jan 21, 2014

+1

Кстати почему не просто focus, а nb-focus?

@shirokoff
Copy link
Contributor Author

Да, можно и просто focus наврно. Так даже лучше.

@basvasilich
Copy link
Contributor

События без префикса могут пересечься с событиями в реализации
Например "open" это событие которое может прийти из вне и запустить обработчик.

Чем смущает префикс?

@basvasilich
Copy link
Contributor

@vitkarpov

@shirokoff
Copy link
Contributor Author

Ну а зачем он нужен то вообще?

@maksimr
Copy link
Contributor

maksimr commented Jan 21, 2014

@basvasilich

Можно события которые имитируют или являются DOM событиями делать без префикса, а кастомные(nanoisland-овские) с префиксом nb-. Тогда сразу понятно что с префиксом это островное событие, которое к DOM никакого отношения не имеет.

@basvasilich
Copy link
Contributor

Префикс чтобы не путать с DOM событиями. События в NB например сейчас не всплывают.

@arteg
Copy link
Member

arteg commented Jan 21, 2014

+1 к предложению унифицировать.
Насчет DOM-событий, по-моему, стандартная практика юзать свой namespace someevent.nb. События блоков можно оставить с префиксами.
А каков статус #105?

@basvasilich
Copy link
Contributor

в #105 нужен rebase на master

@basvasilich
Copy link
Contributor

DOM события внутри наноблоков имеют значение.
Тригерить DOM события на элементах так просто не получается.
Так что:
focus -> nb-focused
blur -> nb-blured
change -> nb-changed

@maksimr
Copy link
Contributor

maksimr commented Jan 22, 2014

DOM события внутри наноблоков имеют значение.

Не совсем понятно. Какое значение?

Тригерить DOM события на элементах так просто не получается.

Почему?

@basvasilich
Copy link
Contributor

В текущей реализации есть разделение на DOM и кастомные события:

DOM события навешиваются на this.node
https://github.com/yandex-ui/nanoislands/blob/master/libs/nanoblocks.js#L364-L378
Это сделано не просто так.

Все кастомные вешаются на сам nb блок, что логично.

@basvasilich
Copy link
Contributor

Дальше триггер события на node вызывает обработчик внутри блока.
То есть при вызове $(this.node).trigger('blur') вызывается метод nb.block.blur() что вызывает зацикливание.

То есть либо метод называть onblur либо событие делать не DOM.
Мне кажется метод в API важнее названия события.

Такое поведение наверное можно обойти. Но там надо копать.

Нам правда так важно иметь именно focus, blur, change. Есть какие-то причины кроме эстетических когда это действительно важно?

@maksimr
Copy link
Contributor

maksimr commented Jan 22, 2014

То есть при вызове $(this.node).trigger('blur') вызывается метод nb.block.blur() что вызывает зацикливание.
То есть либо метод называть onblur либо событие делать не DOM.

Есть еще вариант не вызывать trigger внутри функции blur :)
Так как эта функция обработчик события а не emitter

Нам правда так важно иметь именно focus, blur, change. Есть какие-то причины кроме эстетических когда это действительно важно?

Я думаю было важно иметь унифицированное событие :)
А с префиксом, постфиксом или без него уже вторично.

focus
nb-focus
focus.nb

а не nb-focus-input, nb-focus-button

@basvasilich
Copy link
Contributor

Или я что-то не понимаю, или как ты добавишь свой обработчик на blur при:

block.blur();

Унификация уже сделана, у всех блоков nb-focused.

@maksimr
Copy link
Contributor

maksimr commented Jan 22, 2014

Или я что-то не понимаю, или как ты добавишь свой обработчик на blur при block.blur()

Я бы вызвал мой обработчик там же где вызывается block.blur :) (т.е. тригерится событие blur по кторому мы вызваем block.blur)

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

5 participants