emberjs 重置路由模型

emberjs resetting a routes model

我想在用户点击 table 上的排序 header 后重置路线上的模型:

import Ember from 'ember';
//import _ from 'lodash';

export default Ember.Route.extend({
    needs: 'event-profile',
    model: function(){
        var parentmodel = this.modelFor('eventProfile').get('slug');
        return this.store.find('listingEvent', { eventInstanceSlug: parentmodel, skip: 0, limit: 20 });
  },
  actions: {
        orderByStart: function(){
            this.set('loading', true);
            console.debug('order by start');
            var _this = this;
            var parentmodel = this.modelFor('eventProfile').get('slug');
            this.store.find('listingEvent', { eventInstanceSlug: parentmodel, skip: 0, limit: 20, sort: 'start' })
            .then(function(model){
                _this.set('loading', false);
                _this.set('model', model);
            });
        }
     }
});

orderByStart 被解雇了,我可以看到正在返回正确的数据,但是使用 _this.set('model', model); 设置模型似乎没有任何效果?

解决这个问题的正确方法是什么?

潜在的问题是您的操作处理程序在您的路线上,但您需要更改的模型 属性 在您的控制器上。快速的变化是调用controllerFor.

例如这个:_this.set('model', model);

变为:_this.controllerFor('my-route').set('model', model);

但是,将您的操作处理程序移至控制器本身可以更好地完成此操作。

import Ember from 'ember';

export default Ember.Controller.extend({
  needs: 'event-profile',

  loading : false,

  actions: {
    orderByStart: function(){

      this.set('loading', true);
      var _this = this;
      var parentmodel = this.get('controllers.eventProfile.model.slug');

      this.store.find('listingEvent', { eventInstanceSlug: parentmodel, skip: 0, limit: 20, sort: 'start' })
        .then(function(model){
          _this.setProperties({ loading : false, model : model});
        });
      }
   }
});