Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/sorting/2.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/visual-studio-2012/2.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 Backbone.js比较器未排序(Coffeescript)_Javascript_Sorting_Backbone.js_Coffeescript - Fatal编程技术网

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

Javascript Backbone.js比较器未排序(Coffeescript),javascript,sorting,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: previe

我正在尝试使用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比较器的问题吗?谢谢

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

  • 您添加了一些模型并定义了一个
  • 手动调用集合并定义了一个
    比较器
  • 添加模型时:

    preview = new Collections.Bananas(@model.get('bananas').slice(0,5))
    
    据推测,集合上没有定义
    比较器
    ,因此不进行排序。然后分配
    比较器
    属性:

    preview.comparator = (banana) -> banana.get("name")
    
    class Collections.Bananas extends Backbone.Collection
        comparator: 'name'
        # as you have now...
    
    但不要调用
    preview.sort()
    命令集合自行排序

    您有两个基本选项:

  • 在添加任何内容之前定义比较器。您可以将
    比较器
    功能作为集合定义的一部分:

    class Collections.Bananas extends Backbone.Collection
        comparator: (banana) -> banana.get('name')
        # as you have now...
    
    或者只使用属性,因为您是按模型属性排序的:

    preview.comparator = (banana) -> banana.get("name")
    
    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])
    
  • 手动调用排序

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

  • 这太棒了,非常感谢!创建我定义集合的comparator函数非常有效。非常感谢!实际上我还有一个问题。假设我总是希望一个香蕉(数据库中的主香蕉。它有一个is_primary属性)显示在顶部,而不管它的字母位置如何。如何实现这一点?您必须使用一个双参数
    比较器
    函数,如果您的比较器是
    (a,b)->…
    ,那么它的行为类似于
    数组.prototype.sort
    比较器函数。