私はこれをEmberJSWebサイトのフィルタリングの下で気づきました。
Enumerableで実行するもう1つの一般的なタスクは、Enumerableを入力として受け取り、sortingまたはいくつかの基準に基づいてフィルタリングした後、配列を返すことです。
Emberオブジェクトの配列があると想像してください。プロパティで並べ替えるにはどうすればよいですか?
App.DemoArray = Ember.ArrayController.create({
content:[
Ember.Object.create({name:'Joe', Age:29}),
Ember.Object.create({name:'Jim', Age:53}),
Ember.Object.create({name:'Jack', Age:12})
]
})
上記を年齢で並べ替えたい場合はどうなりますか?ご協力いただきありがとうございます!
編集:これはsproutcoreのドキュメントで見つかりましたが、Emberでは機能しないようです:
SortPropertyを使用して、一部のプロパティまたはプロパティのリストの値に基づいてEnumerableを並べ替えることができます。複数のプロパティを渡すと、SproutCoreは、最初のプロパティの値が同じであるアイテムを2番目のパラメーターの値で並べ替えます。
このページのセクション3.8: http://guides.sproutcore20.com/enumerables.html
ここで説明されているように これでArrayControllerをソートできます。
これを行う方法は、ArrayControllerに追加のプロパティを提供することです(上記のリンクから貼り付けられています)。
songs = [
{trackNumber: 4, title: 'Ob-La-Di, Ob-La-Da'},
{trackNumber: 2, title: 'Back in the U.S.S.R.'},
{trackNumber: 3, title: 'Glass Onion'},
];
songsController = Ember.ArrayController.create({
content: songs,
sortProperties: ['trackNumber'],
sortAscending: true
});
songsController.get('firstObject'); // {trackNumber: 2, title: 'Back in the U.S.S.R.'}
songsController.addObject({trackNumber: 1, title: 'Dear Prudence'});
songsController.get('firstObject'); // {trackNumber: 1, title: 'Dear Prudence'}
Ember MutableArray
にはsortBy
メソッドがあります。
編集:以下の解決策は数値にのみ適用されるようです。ただし、このリンクは、英数字、日付などの処理方法に関するアドバイスを提供します。 http://www.javascriptkit.com/javatutors/arraysort2.shtml
気にしないで、私はそれを理解しました。これは、sortメソッドに組み込まれたJavascriptで実行できます。
//To sort ASC
var sorted = content.sort(function(a,b) {
return a.get('propertyYouWantToSortBy') - b.get('propertyYouWantToSortBy');
});
//To sort DESC
var sorted = content.sort(function(a,b) {
return b.get('propertyYouWantToSortBy') - a.get('propertyYouWantToSortBy');
});
誰かがこれに遭遇した場合に備えて、ember
Ember.computed.sort('nameOfArrayToSort', sortDefinition)
sortDefinitionは文字列の配列である可能性があります
['mainSortProperty:asc', 'secondarySortProp:desc', ...]
またはコンパレータ機能
ここのドキュメント: http://emberjs.com/api/classes/Ember.computed.html#method_sort
https://github.com/emberjs/ember.js/issues/335 で説明されているように、ソートはコアに実装されなくなりましたember.js
パッケージ。