Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ember.js/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ember.js 一个路由模型_Ember.js_Ember Data_Ember Cli - Fatal编程技术网

Ember.js 一个路由模型

Ember.js 一个路由模型,ember.js,ember-data,ember-cli,Ember.js,Ember Data,Ember Cli,我想在用户单击表上的排序标题后重置路由上的模型: 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

我想在用户单击表上的排序标题后重置路由上的模型:

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被触发,我可以看到返回了正确的数据,但是使用
\u this.set('model',model)设置模型似乎没有任何效果


正确的方法是什么?

根本的问题是,您的操作处理程序在您的路径上,但需要更改的模型属性在您的控制器上。最快的变化是给控制器打电话

e、 g.此:
\u此.set('model',model)

变成:
\u 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});
        });
      }
   }
});

您不应该仅仅为了切换回订单而重新加载模型。另外,为了更好地回答这个问题,了解您是如何对模型进行排序的会有所帮助。我不确定我是否了解您-我的后端如何对这些记录进行排序有什么关系?还有-如果我不将排序发送到服务器,您认为这将如何工作?抱歉-我不确定您是否理解这个问题?您是对的,没有从您的问题中意识到排序影响了返回的数据。问题是您在路由上而不是在控制器上设置模型<代码>\u this.controllerFor('my-route').set('model',model)啊哈AAA-我确实让它工作了,但方式不同。我一进办公室就跟你胡说。把它设置为一个答案,我会把它标记为正确:)好的工作伙伴-我讨厌控制器和路由之间的这种奇怪-我听说控制器将一起工作-这将如何处理?!可路由组件。当你停下来想一想,你把动作放在控制器上,而在视图中几乎什么都没有,把它们结合起来是有意义的,这基本上就是一个组件的全部。