Обновление модели, отфильтрованной с помощью queryParams, без перехода в EmberJS

В моем приложении у меня есть маршрут, в котором я использую queryParams для фильтрации массива. Когда я добавляю новый элемент в массив, который соответствует критериям фильтра, шаблон не обновляется новым элементом.

Очень простой пример корзины по адресу http://emberjs.jsbin.com/qetami/1#/colors?type=secondary

В этом примере при фильтрации по вторичным цветам нажмите кнопку «Добавить цвет» и добавьте новый цвет с типом цвета, установленным на вторичный. Цвет проявляется не сразу. Если вы измените фильтр, вернитесь к вторичному, он появится. Он автоматически появляется при использовании маршрута без фильтрации/по умолчанию.

Я пробовал с хуком queryParams и без него на маршруте Colors, но безуспешно.

Кажется, что это должно быть прямо вперед, но я столкнулся со стеной.


person ultimatemonty    schedule 16.12.2014    source источник


Ответы (2)


Я не мог заставить что-то работать с .observes(), однако я придумал рабочую версию вашего примера, если вы используете действия, всплывающие через маршруты, чтобы у вас было хорошее место для вызова this.refresh(), чтобы перезагрузить отфильтрованную модель.

http://jsbin.com/qomiba/3/edit

Примечание: меня смущает, что у вас есть ссылки на «цвета» в разных местах, которые означают разные вещи.

person Bradley Schaefer    schedule 16.12.2014
comment
Спасибо за ответ! Я попробую, как только уложу детей спать. Извините за путаницу - это был быстрый и грязный надуманный пример того, с чем я столкнулся в своем приложении. - person ultimatemonty; 17.12.2014
comment
Хорошо, я провел несколько тестов, и ваше решение почти идеально. Я понятия не имел о событии queryParamsDidChange — нигде не видел его в документах! - person ultimatemonty; 17.12.2014
comment
Я все еще работаю над некоторыми причудами в своем приложении, которые было трудно воспроизвести в корзине — я обновлю позже. - person ultimatemonty; 17.12.2014
comment
Ваше решение твердое. Мне не удалось заставить его работать в моем приложении, но я на 100% уверен, что это связано с некоторыми странностями моего приложения, а не с предоставленным решением. Пометка как ответ и спасибо за помощь! - person ultimatemonty; 19.12.2014

Из emberjs.com/guides

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

App.PostsFavoritedRoute = Ember.Route.extend({
  model: function() {
    var store = this.store;

    // Create a filter for all favorited posts that will be displayed in
    // the template. Any favorited posts that are already in the store
    // will be displayed immediately;
    // Kick off a query to the server for all posts that
    // the user has favorited. As results from the query are
    // returned from the server, they will also begin to appear.
    return store.filter('post', { favorited: true }, function(post) {
      return post.get('isFavorited');
    });
  }
});
person Asgaroth    schedule 16.12.2014