Hao*_*Hao 2 javascript ember.js
在Ember 2中,我尝试sortBy
了Enumerable。
该sortBy('something:asc')
工程纠正。但是sortBy('something:desc')
不一样sortBy('something:asc').reverse()
。(不是desc
吗?)
我试图将something
属性更改为布尔值或字符串或数字。似乎只有“ string”类型适用于reverse
。
实际上,Ember.Enumerable.sortBy方法不带任何方向,因为看到这里,这是怎么Ember.computed.sort,工作以及后续内部通话时如文档例子看到这里。
这意味着您的代码"asc"
也不起作用。您只是偶然获得正确的结果。相关的github问题
此外,之所以只能将字符串用作参数,sortBy
是因为sortBy
内部 在每个元素上调用Ember.get来按您提供的名称提取属性,而属性名称是字符串。
换句话说,的签名sortBy
是sortBy(property)
(docs)
的方式sortBy
确定的元素的顺序是通过调用比较从余烬的运行时方法,其不幸的是,内部操作,而且也没有API来影响它。
正确执行双向排序的方法如下:
sortBy('something')
sortBy('something').reverse()
不幸的是)我相信这是有意的,因为Ember遵循约定优于配置范式,基本上迫使您赞成使用Ember.computed.sort
,尤其是在性能很重要的情况下。
sortingBy: ['something:desc'],
sortedCollection: Ember.computed.sort('collection', 'sortingBy')
Run Code Online (Sandbox Code Playgroud)
您可以执行的另一种解决方法是使用toArray方法将Enumerable转换为常规JS数组,对其进行排序,然后使用新排序的数组覆盖该属性:
const sortedDesc = this.get('something')
.toArray() // convert the enumerable to a regular JS array
.sort(/* your descending sort comparison function */);
this.set('something', sortedDesc);
Run Code Online (Sandbox Code Playgroud)
这样会更快(不需要反转数组),但是会占用更多内存,因为toArray
每次您排序时都会创建一个新数组(通过调用)。
归档时间: |
|
查看次数: |
1686 次 |
最近记录: |