如何排序和过滤主干集合

时间:2014-06-18 02:11:15

标签: sorting backbone.js collections filter

骨干相对较新。我试图在传递给模板之前对集合进行过滤和排序。我可以轻松地排序或过滤,但我无法弄清楚如何做到这两点。我尝试将它们链接起来,创建一个变量来保存过滤器,然后对其进行排序,但无法获得任何工作。任何建议?谢谢!

# Can filter like this:
monday =  @collection.where({ target: '#day-mon' })

# Can sort like this:
mondaySorted =  @collection.sortBy (t) -> t.get('order')

# Doesn't work:
mondayFilteredSorted = @collection.where({ target: '#day-mon' }).sortBy (t) -> t.get('order')

# Doesn't work:
mondaySorted = monday.sortBy (t) -> t.get('order')

1 个答案:

答案 0 :(得分:0)

您的问题是wheresortBy返回数组 - 而不是集合 - 并且数组不具有wheresortBy方法。只要您wheresortBy,您就无法访问Backbone集合和Underscore实用程序。

您当然可以直接在where为您提供的阵列上使用Underscore:

_(@collection.where(target: '#day-mon')).sortBy (t) -> t.get('order')

或者您可以使用chainfilter

@collection.chain().filter((m) -> m.get('target') == '#day-mon').sortBy((m) -> m.get('order')).value()

where是一种Backbone收集方法,因此如果您想要filter,则必须下拉到下划线chain

您也可以使用标准Array::sort

by_order = (a, b) ->
    [ a, b ] = [ a.get('order'), b.get('order') ]
    return  1 if(a > b)
    return -1 if(a < b)
    return  0
@collection.where(target: '#day-mon').sort(by_order)

如果您不使用sort匿名函数,我觉得这个版本更容易一些。

演示:http://jsfiddle.net/ambiguous/N6AT7/1/