Backbone.js比较器没有排序(Coffeescript)

时间:2014-02-13 22:18:00

标签: javascript sorting backbone.js coffeescript

我正在尝试使用Coffeescript在Backbone.js中按字母顺序对集合进行排序。该集合是我想要显示的表中的前5个对象。

  preview = new Collections.Bananas(@model.get('bananas').slice(0,5))

  preview.comparator = (banana) -> banana.get("name")

  bananas = new BundleOfBananas.Bananas({collection: preview})

对象都在显示,我正在获取正确的数据,它不是按字母顺序排列的。谁能帮助我使用Backbone.js比较器?谢谢!

1 个答案:

答案 0 :(得分:3)

当发生以下两种情况之一时,Backbone集合会自行排序:

  1. 您添加了一些模型并定义了comparator
  2. 您手动调用集合上的sort并定义了comparator
  3. 添加模型时:

    preview = new Collections.Bananas(@model.get('bananas').slice(0,5))
    

    据推测,集合上没有定义comparator,因此没有进行排序。然后分配comparator属性:

    preview.comparator = (banana) -> banana.get("name")
    

    但请勿致电preview.sort()告诉收藏品自行排序。

    您有两个基本选项:

    1. 在添加任何内容之前定义比较器。您可以将comparator函数作为集合定义的一部分:

      class Collections.Bananas extends Backbone.Collection
          comparator: (banana) -> banana.get('name')
          # as you have now...
      

      或者只是使用属性,因为您要按模型属性进行排序:

      class Collections.Bananas extends Backbone.Collection
          comparator: 'name'
          # as you have now...
      

      然后实例化您的收藏:

      new Collections.Bananas(@model.get('bananas')[0..4])
      

      这将为您提供自动排序的集合。如果您想现在手动分配comparator,那么:

      preview = new Collections.Bananas
      preview.comparator = 'name'
      preview.reset(@model.get('bananas')[0..4])
      
    2. 手动拨打sort

      preview = new Collections.Bananas(@model.get('bananas')[0..4])
      preview.comparator = 'name'
      preview.sort()