javascript - Backbone.js 比较器未排序(Coffeescript)

标签 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 比较器吗?谢谢!

最佳答案

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

  1. 您添加了一些模型并得到了 comparator已定义。
  2. 您手动调用sort在集合上并定义一个比较器

当您添加模型时:

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

据推测,集合上没有定义比较器,因此不会进行排序。然后分配 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])
    

    这将为您提供一个自动排序的集合。如果您想像现在一样手动分配比较器,那么:

    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()
    

关于javascript - Backbone.js 比较器未排序(Coffeescript),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21766742/

相关文章:

javascript - backbone remove view 删除 el

javascript - 模型创建新行而不是进行编辑

backbone.js - Marionette 布局和区域有什么区别?

javascript - 如何为螺旋图制作动画

javascript - jQuery 替换表格中的内容

javascript - 根据数据库中的数据进行多项选择

arrays - 按日期对运行对象数组进行排序(核心数据)

javascript - 在 NPObject 上调用方法时出错!

MySQL 以 DESC 顺序查询比 ASC 顺序更快

java - 如何在 Java 中对对象数组进行排序?