# 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')
答案 0 :(得分:0)
您的问题是where
和sortBy
返回数组 - 而不是集合 - 并且数组不具有where
或sortBy
方法。只要您where
或sortBy
,您就无法访问Backbone集合和Underscore实用程序。
您当然可以直接在where
为您提供的阵列上使用Underscore:
_(@collection.where(target: '#day-mon')).sortBy (t) -> t.get('order')
或者您可以使用chain
和filter
:
@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
匿名函数,我觉得这个版本更容易一些。