web-dev-qa-db-ja.com

EmberJSオブジェクトの配列をプロパティで並べ替える

私はこれを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

21
skinneejoe

ここで説明されているように これで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'}
11
Willem de Wit

Ember MutableArrayにはsortByメソッドがあります。

https://emberjs.com/api/ember/release/classes/MutableArray

16
Nath

編集:以下の解決策は数​​値にのみ適用されるようです。ただし、このリンクは、英数字、日付などの処理方法に関するアドバイスを提供します。 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');
});
11
skinneejoe

誰かがこれに遭遇した場合に備えて、ember

 Ember.computed.sort('nameOfArrayToSort', sortDefinition)

sortDefinitionは文字列の配列である可能性があります

 ['mainSortProperty:asc', 'secondarySortProp:desc', ...]

またはコンパレータ機能

ここのドキュメント: http://emberjs.com/api/classes/Ember.computed.html#method_sort

4
stevethecollier

https://github.com/emberjs/ember.js/issues/335 で説明されているように、ソートはコアに実装されなくなりましたember.js パッケージ。

3
pangratz