繁体   English   中英

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

[英]Sort a collection in Ember.Controller

我继承了一些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函数,并试图弄清楚如何对设置为控制器的collection属性的数组进行排序。 我看过的所有示例都可以直接与Ember.ArrayController一起Ember.ArrayController 是否可以使用此现有代码和Ember.Controller进行排序?

你有什么不想仅仅使用一个原因ArrayController 如果可以将您的collection属性视为此页面的支持模型,则通常的做法是通过基础路由填充model属性来替换collection属性。

如果您想保留现有的页面,那么Ember.SortableMixin就是您的正确Ember.SortableMixin 最初,我认为您需要使用Ember.ArrayProxy来利用sortBy ,但是@ Kingpin2k在评论中友善地指出Ember实际上直接扩展了数组原型,因此甚至没有必要。

@ Kingpin2k组合了一个不错的jsbin,它在运行中显示了这一点:

http://emberjs.jsbin.com/gepeko/1/edit

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM