Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/455.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
Javascript 在Ember.Controller中对集合进行排序_Javascript_Ember.js - Fatal编程技术网

Javascript 在Ember.Controller中对集合进行排序

Javascript 在Ember.Controller中对集合进行排序,javascript,ember.js,Javascript,Ember.js,我继承了一些Ember.js代码,由于某些原因,开发人员没有在这里使用Ember.ArrayController,所以我手动混合了Ember.SortableMixin。以下是我尝试使用的代码: App.NflProjectionsController = Ember.Controller.extend(Ember.SortableMixin, { position: 'qb', site: 'FanDuel', type: 'nfl_weekly_projection',

我继承了一些Ember.js代码,由于某些原因,开发人员没有在这里使用Ember.ArrayController,所以我手动混合了Ember.SortableMixin。以下是我尝试使用的代码:

App.NflProjectionsController = Ember.Controller.extend(Ember.SortableMixin, {
  position: 'qb',
  site: 'FanDuel',

  type: 'nfl_weekly_projection',    
  isLoading: true,

  collection: [],

  isQB:     Ember.computed.equal('position', 'qb'),
  isWR:     Ember.computed.equal('position', 'wr'),
  isRB:     Ember.computed.equal('position', 'rb'),
  isTE:     Ember.computed.equal('position', 'te'),
  isK:      Ember.computed.equal('position', 'k'),
  isDEF:    Ember.computed.equal('position', 'def'),
  isFlex:   Ember.computed.equal('position', 'flex'),

  isFanDuel:     Ember.computed.equal('site', 'FanDuel'),
  isDraftKings:  Ember.computed.equal('site', 'DraftKings'),
  isDraftStreet: Ember.computed.equal('site', 'DraftStreet'),
  isFantasyAces: Ember.computed.equal('site', 'FantasyAces'),
  isDraftDay:    Ember.computed.equal('site', 'DraftDay'),

  actions: {
    choosePosition: function(type){
      this.set('collection', []);
      this.set('position', type);
    }, 

    chooseSite: function(type){
      this.set('collection', []);
      this.set('site', type);
    },

    sortBy: function(property) {
      this.set('sortProperties', [property]);
      this.set('sortAscending', !this.get('sortAscending'));
    }
  },

  positionObserver: function(){
    this.set('isLoading', true);
    var self = this;
    this.store.find(this.get('type'), {position: self.get('position'), site_id: self.get('site')}).then(function(collection){
      // console.log("here we are");
      if (self.get('collection').length == 0)
        self.set('collection', collection.toArray());
      self.set('isLoading', false);
    });
  }.observes('position').on('init'),

  siteObserver: function(){
    this.set('isLoading', true);
    var self = this;
    this.store.find(this.get('type'), {position: self.get('position'), site_id: self.get('site')}).then(function(collection){
      if (self.get('collection').length == 0)
        self.set('collection', collection.toArray());
      self.set('isLoading', false);
    });
  }.observes('site').on('init')

});
我创建了
sortBy
函数,并试图找出如何对设置为控制器的
集合的数组进行排序。我看到的所有示例都直接使用
Ember.ArrayController
。是否可以使用此现有代码和
Ember.Controller
进行排序

您不想只使用
阵列控制器有什么原因吗?如果可以将您的
集合
属性视为此页面的支持模型,则标准做法是通过基础路由填充
模型
属性来替换
集合
属性

如果您想保留现有页面,那么使用
Ember.SortableMixin
,您就走上了正确的道路。最初,我认为您需要使用
Ember.ArrayProxy
来利用
sortBy
,但是@Kingpin2k在评论中善意地指出,Ember实际上直接扩展了阵列原型,所以即使这样也没有必要

@Kingpin2k整合了一个很好的jsbin,展示了这一点:


sortBy
是通过ember包含的阵列原型扩展添加的,您不需要使用ember.A或ArrayProxy来包装它们@感谢您的澄清!我没有意识到Ember扩展了js阵列原型。我现在要修改我的答案。