我想过滤然后排序我的余烬记录,以便首先返回列的空记录。我对余烬不太熟悉,并且有一个轨道背景。
filteredByData = myLeads.filterBy('status', 'open').filterBy('doNotCall', false).filterBy('phoneValid', true)
filtered = filteredByData.sortBy 'last_dialed_at', 'last_name', 'first_name', 'id'
现在,我的记录是根据 id 排序的。
我想要的是在任何查询中实现来自 sql 或 postgres 的NULLS LAST/FIRST
(例如在我的排序中SELECT * FROM t1 ORDER BY c1 DESC NULLS FIRST
,以便我获得记录,以便首先出现last_dialed_at
空记录。
我知道同样可以在轨道中实现,例如
Foo.order('last_dialed_at DESC NULLS FIRST')
但我不知道余烬中也是如此
任何帮助将不胜感激。提前谢谢。
PS:我会尝试创建一个余烬,同时更好地解释自己。
虽然你可以求助于SortableMixin/ArrayProxy,但这些是比你真正需要使用的较低级别的API。 sortBy
适用于单个值,但是当我需要对多个内容进行排序时,我通常会使用computed.sort
。看看这个答案中的代码和链接 https://stackoverflow.com/a/46788377/334913 他们应该让你开始。
Ember建议的常见方法之一是为每个步骤(或一组步骤)执行计算属性,因为它使推理变得更加容易。
所以我会做一些类似的事情:
filteredLeads: Ember.computed('leads', function() {
return filteredResultsHere;
}),
sortDefinition: [], // put your entries from your SortableMixin here
sortedFilteredLeads: Ember.computed.sort('filteredLeads', 'sortDefinition'),
我通过使用Ember.SortableMixin
而不是sortBy
解决了我的问题。我最终得到了以下代码,这对我来说非常有效。
leads = Ember.ArrayProxy.createWithMixins Ember.SortableMixin, content: filteredByData, sortProperties: ['lastDialedAt', 'firstName', 'lastName', 'id'], sortAscending: true
我不确定或不太清楚为什么这有效,以及我可以在一定程度上解释这种行为的基本原理。如果有人对此有任何解释,请随时将您的答案放在下面,我会接受它作为答案。
谢谢