Javascript-форум (https://javascript.ru/forum/)
-   Оффтопик (https://javascript.ru/forum/offtopic/)
-   -   Смишных картинок тред (https://javascript.ru/forum/offtopic/35821-smishnykh-kartinok-tred.html)

Maxmaxmaximus4 11.12.2013 02:32


я тут сижу пилю
и думаю, а ну его нафиг
лучше буду варнинг бросать а проблему автоматически решу, весь ui буду в таком стиле теперь делать чтобы хоть как-то работало а разработчику указ был.


ВОТ как делают отцы!!

п.с. человек не понимающий что тут написано не сделает этой ошибки =)

плюсы:

1) сайт работает, хоть как-то
2) разработчику нет нужды ловить эксепшены на всякий случай.


чтоб вы поняли, если в шаблоне если атрибут transclude то в конец этого элемента вставляется наша директива
replase означает что мы шаблоном заменяем директиву, а transclude внутри шаблона говорит что в это место надо вставить оригинальный элемент, и вот если у нас restrict E то есть директива это "элемент" то парсер парся шаблон, обнаружит там директиву qq И повторит операцию с её заменой на шаблон. И все улетит в рекурсию. Грубо говоря мы директиву заменяем на шаблон, пихаем в середину шаблона эту самую директиву на место которой только что поставили шаблон, шаблон парсится директива находится внутри шаблона и снова заменяется на шаблон и попадает внутрь этого шаблона. и так вечно =) я просто меняю имя директивы чтобы хоть как-то работало и бросаю об этом варнинг.

cyber 11.12.2013 02:44

Maxmaxmaximus4, не совсем понял, а если будет так
<div> div </div>

тоже заменит?

Maxmaxmaximus4 11.12.2013 02:51

Цитата:

Сообщение от cyber
тоже заменит?

не, короче можно создавать директивы двух типов атрибуты и элементы

restrict : 'EA'

'E' - элемент, 'A' - атрибут или 'AE' - и то и то





пруф что работает:




ну и вот:




я replace true означает что мы именно заменяем директиву на шаблон, а не пихаем содержимое шаблона внутрь директивы
как это по умолчанию)

Maxmaxmaximus4 11.12.2013 02:56

если replace true и в коде шаблона встречается элемент у которого есть атрибут transclude, то оригинальный элемент который мы заменили на шаблон помещяется в конец этого элемента с атрибутом transclude. Так вот, если у нас restrict E, то есть директива действует только на элементы, и есть шаблон и replace true, и внутри шаблона есть элемент у которого есть атрибут transclude то мы щитай заменяем директиву допустим <qq></qq> на шаблон, потом вставляем её в шаблон, парсим шаблон, и парсер снова находит директиву и заменяет её, и рекурсия, ну ты понял. в случае если директива - атрибут, то я просто его удаляю, а тут имя элемента ни как не удалить.

Maxmaxmaximus4 11.12.2013 03:00

Дзен-трансгуманист, а у меня есть сервис, угадай как называется)?
$exeption он короче будет заниматься выводом ошибок на разных языках, выдает ссылки на форум по решению этой проблемы или ссылку на доки, и проче, сможет отсылать ошибки на сервер с кодами и.т.п. так же люди смогут использовать его внутри своих проектов чтобы пользователям допустим на экран ошибку выводить и прочее.

но пока я его не юзаю, и наверное зря, потом придется все throw и console.warn искать в коде и на него заменять=)


к слову юзать его оч просто, просто берешь и пишешь в коде

ui.service('$exeption')('*',function(error, type){
  ui.service('$http')('errors.php',{error:error,type:type}); //errors.php?error=text&type=type
})

// бросаем ошибку 
ui.service('$exeption')('error text','type')


это конечно грубо но я просто суть показал

Maxmaxmaximus4 11.12.2013 03:11

Дзен-трансгуманист, кстати знаешь почему я его не юзаю? потому что строку где произошла ошибка показывает не ту где ошибка а ту где код сервиса $exeption, и вот это бесит. по крайней мере когда ты программируешь и баги ловишь. а когда как пользователь сидишь то наверное уже удобно.

cyber 11.12.2013 03:13

Цитата:

Сообщение от Maxmaxmaximus4
$exeption он короче будет заниматься выводом ошибок на разных языках,

только пусть лучше будет выводить подобные ошибки только в режиме дебага.

Maxmaxmaximus4 11.12.2013 03:15

в смысле если не повесишь на него обработчик то ни чо не будет выводить) а так просто вешаешь

ui.service('$exeption')(function(error,type){
  console.error(type+': '+error)
})

Maxmaxmaximus4 11.12.2013 03:33

Дзен-трансгуманист, вы немного не поняли $exeption ловит и обычные ошибки которые throw если их бросли какие-то сервисы или чо-то такое. я просто для примера показал что можно вызвать ошибку вручную =)

Maxmaxmaximus4 11.12.2013 03:34

Цитата:

Сообщение от Дзен-трансгуманист
Так потому что именно оттуда, где код сервиса, и происходит выброс.

спасибо кэп =) и происходит не выброс, а console.error()

Цитата:

Сообщение от Дзен-трансгуманист
которая собирает их имена и сам стек

нооо, ведь это хром автоматически делает О_О каждый обьект Error имеет stark и посмотреть его можно если ты делаешь console.error(errorObj) то в консоли где ошибка стрелочка появляется и там стек показывает) кэп


Часовой пояс GMT +3, время: 15:17.