Показать сообщение отдельно
  #5 (permalink)  
Старый 16.10.2014, 08:52
Аватар для MetaDriver
Аспирант
Отправить личное сообщение для MetaDriver Посмотреть профиль Найти все сообщения от MetaDriver
 
Регистрация: 24.04.2014
Сообщений: 66

Сообщение от Sufir Посмотреть сообщение
Мне нужно сделать своего рода тройной биндинг, т.е. изменение модели должно отражаться на адресной строке и наоборот, изменение параметра в строке должно менять модель.
...........

Но работает это довольно криво, то сбрасывается параметр в адресной строке (т.к. $watch сначала дважды вызывается со значениями null и undefined), приводит к лишним запросам к серверу, не обновляется селект... В общем, проблемный вариант.
Постановка задачи кривоватая - страдает ненужной избыточностью. Сделать, конечно можно и в такой постановке, но это довольно бессмысленно. Я бы поправил следующим образом:
  1. При начальной загрузке страницы значения фильтров брать из адресной строки, и как абсолютно верно заметил коллега a.malitsky - сразу же отправлять запрос на сервер.
  2. При редактировании селектов, изменения отображать в адресной строке односторонне. Обратный биндинг (адресная строка -> фильтры) в динамике (при уже открытой странице) совершенно избыточен и не нужен. Сложно представить умника, который будет редактировать строку поиска в гуглояндексе, редактируя адресную строку браузера (!! ), в то время как перед носом вполне человекоориентированный инпут (в твоём случае - селекты).
С этими поправками всё резко упрощается и ты, я уверен, с этим легко справишься.

Последний раз редактировалось MetaDriver, 16.10.2014 в 08:56.
Ответить с цитированием