2014-01-17 2 views
6

У меня есть модель «Фильтр», и пользователь может изменить эту модель, нажав на страницу.Переход на тот же маршрут с той же моделью

Поэтому, когда пользователь вносит изменения в модель, я хочу перейти на тот же маршрут, на котором он в настоящее время включен, поскольку URL-адрес отличается в зависимости от деталей модели (я переопределил «сериализацию» на маршруте чтобы это было так).

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

Как это сделать?

Edit:

Вот код в моем ApplicationController

App.ApplicationController = Ember.Controller.extend 
    currentFilter: null 

    actions: 
     toggleRegion: (region_id) -> 
      region = this.store.getById('region', region_id) 

      filter = this.get('currentFilter') 

      # modify the filter 
      if filter.containsAtLeastOneCityOfRegion(region) 
       filter.disableRegion(region) 
      else 
       filter.enableRegion(region) 

      this.replaceRoute('listings', filter) 

Теперь, это работает как задумано, когда я нахожусь в «индексной» маршрут, но если я уже в «списки» маршрут модифицируется, как предполагалось, но замена маршрута не происходит, и, следовательно, мой URL-адрес не обновляется с помощью правильных динамических сегментов (исходя из метода «serialize» от DepositRoute).

+0

, пожалуйста, добавьте ваш код. – Pheonix

+0

Вы используете transitionToRoute (http://emberjs.com/api/classes/Ember.Controller.html#method_transitionToRoute), передавая новую модель? –

+0

Как видно из моего кода, я теперь использую «replaceRoute», но передаю тот же (но модифицированный) объект модели. – elsurudo

ответ

3

Похоже, что Ember делает no-op, если вы хотите перейти на (или заменить, как и в случае со мной) на тот же маршрут, на котором вы находитесь, с объектом модели с тем же идентификатором, что и текущая модель ,

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

+0

Как клонировать объект? – HypeXR

+1

Я включаю микширование «Ember.Copyable» и реализую метод «copy». – elsurudo

Смежные вопросы