Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 15.10.2013, 11:13
Интересующийся
Отправить личное сообщение для Olival888 Посмотреть профиль Найти все сообщения от Olival888
 
Регистрация: 15.10.2013
Сообщений: 10

Isolated scope в select
Доброго времени суток!
Возникла проблема.
Решил я написать хорошую директиву для генерации и вывода сообщений валидации. Для корректной работы директива должна создавать себе изолированную область видимости. И все бы хорошо, но в таком случае перестает нормально работать ng-options в select.
Вот фидл всего этого безобразия (эффект видно, если раскомментировать "//scope: {}").
На stackoverflow.com были пара вопросов на эту тему, но к здравому и всех устраивающему решению так и не пришли.
Пост 1
Пост 2

В случае успешного решения обязательно выложу. Может и допилим общими усилиями )))
Ответить с цитированием
  #2 (permalink)  
Старый 15.10.2013, 12:00
Аватар для nerv_
junior
Отправить личное сообщение для nerv_ Посмотреть профиль Найти все сообщения от nerv_
 
Регистрация: 29.11.2011
Сообщений: 3,924

А в чем вопрос?
__________________
Чебурашка стал символом олимпийских игр. А чего достиг ты?
Тишина - самый громкий звук
Ответить с цитированием
  #3 (permalink)  
Старый 15.10.2013, 12:27
Интересующийся
Отправить личное сообщение для Olival888 Посмотреть профиль Найти все сообщения от Olival888
 
Регистрация: 15.10.2013
Сообщений: 10

Как сделать так, чтобы и директива и ng-options в select работали???
Как то так...
Ответить с цитированием
  #4 (permalink)  
Старый 15.10.2013, 16:53
Профессор
Отправить личное сообщение для DjDiablo Посмотреть профиль Найти все сообщения от DjDiablo
 
Регистрация: 04.02.2011
Сообщений: 1,815

Как вариант переписывать ngOptions
Но проще всего написать свою директиву без изолированного scope.

Попробуй объяснить на фига тебе scope изолировать
__________________
Лучше калымить в гандурасе чем гандурасить на колыме

Последний раз редактировалось DjDiablo, 15.10.2013 в 17:00.
Ответить с цитированием
  #5 (permalink)  
Старый 15.10.2013, 17:12
Интересующийся
Отправить личное сообщение для Olival888 Посмотреть профиль Найти все сообщения от Olival888
 
Регистрация: 15.10.2013
Сообщений: 10

Как то так...

Идея в том, что сначала деректива генерирует список сообщений об ошибках.
Далее - при возникновении ошибки сообщение появляется, но как напоминание (допустим серый цвет шрифта).
При исправлении - исчезает.
При сабмите сообщения о допущеных ошибках становятся более навящивы (допустим, красятся в красный).

Если не использовать Isolated scope, то при возникновении ошибки на одном поле - срабатывают все сообщения.
Ответить с цитированием
  #6 (permalink)  
Старый 15.10.2013, 18:59
Профессор
Отправить личное сообщение для DjDiablo Посмотреть профиль Найти все сообщения от DjDiablo
 
Регистрация: 04.02.2011
Сообщений: 1,815

Вот неплохая статья по теме валидации форм.
http://habrahabr.ru/post/179473/

Пример из статьи 1 (стандартный валидатор)
Пример из статьи 2 (свой валидатор)
пример из статьи 3 (отключение submit для не валидных форм)

Я смутно представлю на фига нужны события, если только ради того чтобы валидацию после нажатия на submit сделать, то я не думаю что это удобно.

И даже пусть ошибки выводятся только при нажатии на submit, тоuгда пусть submit бросит событие, renderError его обработает и если есть ошибка то выведет предупреждение если нет ошибки то спрячет предупреждение. Никаких событий в ответ renderError посылать не должен, submit и без событий может принять решение об отправке формы на основании .$invalid. Изолированный scope нафик нигде ненужен


Сорри если не понимаю задачу.
__________________
Лучше калымить в гандурасе чем гандурасить на колыме

Последний раз редактировалось DjDiablo, 15.10.2013 в 19:29.
Ответить с цитированием
  #7 (permalink)  
Старый 15.10.2013, 19:21
Интересующийся
Отправить личное сообщение для Olival888 Посмотреть профиль Найти все сообщения от Olival888
 
Регистрация: 15.10.2013
Сообщений: 10

Статью читал, но она обзорная...
События в директиве именно для этого они и нужны, но, даже если их удалить, суть не меняется. Изоляция нужна так или иначе...
И, что самое противное, проблема только с ng-options. Переписать не вариант - сильно уж она хитро сделана.
Нужен какой то обходной маневр, вот только я не знаю какой
А если судить по stackoverflow - вообще мало кто знает или знают, но молчат ))))
Ответить с цитированием
  #8 (permalink)  
Старый 15.10.2013, 19:47
Профессор
Отправить личное сообщение для DjDiablo Посмотреть профиль Найти все сообщения от DjDiablo
 
Регистрация: 04.02.2011
Сообщений: 1,815

Тебе никто и не ответит,
в примере http://jsfiddle.net/drRKk/ чо попало написано.

К примеру вмето того чтобы просто вызвать метод requireErrorEnable(), ты используешь события почему то
scope.$emit("requireErrorEnable"); 
scope.$on("requireErrorEnable",function(){});

Если делать это через жопу через события то естественно requireErrorEnable сработает во всех рендерах, а если как функцию то только в том в какой должен. Пока что я вижу что ты используешь изолированный scope только для того чтобы вызывать requireErrorEnable через анальное отверстие, так как изолированный scope позволяет срабатывать событию в рамках одной директивы а не расползаться по всему scope формы. А нужно лиш отказаться от событий внутри директивы, и необходимость изолировать scope исчезнет

Я понять не могу что ты хочешь добится и ничего особо не менял, просто убрал события и изолированный scope чтобы показать что и без него error выводится только в редактируемом input http://jsfiddle.net/xtBXe/

В общем вывод такой что я по прежнему не вижу оснований для изоляции scope.
__________________
Лучше калымить в гандурасе чем гандурасить на колыме

Последний раз редактировалось DjDiablo, 15.10.2013 в 20:43.
Ответить с цитированием
  #9 (permalink)  
Старый 15.10.2013, 20:55
Аватар для tulov_alex
Новичок на форуме
Отправить личное сообщение для tulov_alex Посмотреть профиль Найти все сообщения от tulov_alex
 
Регистрация: 12.10.2013
Сообщений: 3

Сообщение от Olival888 Посмотреть сообщение
Доброго времени суток!
Возникла проблема.
Решил я написать хорошую директиву для генерации и вывода сообщений валидации. Для корректной работы директива должна создавать себе изолированную область видимости. И все бы хорошо, но в таком случае перестает нормально работать ng-options в select.
Вот фидл всего этого безобразия (эффект видно, если раскомментировать "//scope: {}").
На stackoverflow.com были пара вопросов на эту тему, но к здравому и всех устраивающему решению так и не пришли.
Пост 1
Пост 2

В случае успешного решения обязательно выложу. Может и допилим общими усилиями )))
Не ясно для чего вообще огород с директивой городить. Гораздо проще подобная задача решается использованием базовых средств angular для работы с формой (классы ng-valid, ng-invalid, ng-dirty и подобные).
Ответить с цитированием
  #10 (permalink)  
Старый 16.10.2013, 11:48
Интересующийся
Отправить личное сообщение для Olival888 Посмотреть профиль Найти все сообщения от Olival888
 
Регистрация: 15.10.2013
Сообщений: 10

Сообщение от DjDiablo Посмотреть сообщение
Тебе никто и не ответит,
в примере http://jsfiddle.net/drRKk/ чо попало написано.

К примеру вмето того чтобы просто вызвать метод requireErrorEnable(), ты используешь события почему то
scope.$emit("requireErrorEnable"); 
scope.$on("requireErrorEnable",function(){});

Если делать это через жопу через события то естественно requireErrorEnable сработает во всех рендерах, а если как функцию то только в том в какой должен. Пока что я вижу что ты используешь изолированный scope только для того чтобы вызывать requireErrorEnable через анальное отверстие, так как изолированный scope позволяет срабатывать событию в рамках одной директивы а не расползаться по всему scope формы. А нужно лиш отказаться от событий внутри директивы, и необходимость изолировать scope исчезнет

Я понять не могу что ты хочешь добится и ничего особо не менял, просто убрал события и изолированный scope чтобы показать что и без него error выводится только в редактируемом input http://jsfiddle.net/xtBXe/

В общем вывод такой что я по прежнему не вижу оснований для изоляции scope.
Спасибо!!!
Вроде помогло!
Осталось только попробовать в боевых условиях )
Ответить с цитированием
Ответ



Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Игра в демки, пиар ангуляра и обучение. DjDiablo Angular.js 39 07.06.2014 13:11
SQL запрос. Как делать SELECT с условием SELECT Duda.Ml1986@gmail.com Серверные языки и технологии 16 13.01.2014 16:09
Метод для конвертирования едениц px, em, %, pt. jegit Элементы интерфейса 0 07.03.2013 16:15
Как сохранить предыдущее значение select? MaxD Общие вопросы Javascript 3 21.07.2011 12:36
Проблема с динамическим формированием select elepsion jQuery 1 31.10.2010 14:31