2

私は単純なbelongsToモデル関係を持っています:

契約.js:

export default DS.Model.extend({
    object               : DS.belongsTo('object'),
    ....
})

object.js:

export default DS.Model.extend({
    street              : DS.attr('string'),
    zip                 : DS.attr('string'),
    city                : DS.attr('string'),
    ...
})

多くの を保持するエンティティのコントローラーでcontracts、関連する のストリート名で並べ替えたいのですobjectが、どういうわけかこれ

export default Ember.Controller.extend({

    sortOrder: ['object.street'],
    sortedObjects: Ember.computed.sort('model.contracts', 'sortOrder')

    ...
});

動作しません。

カスタム コンパレータ関数を使用する

function(a, b){
    if (a.street > b.street) {
      return 1;
    } else if (a.street < b.street) {
      return -1;
    }
}

aとは であることがわかりましたbPromises、どういうわけか、ネストされた属性 (オブジェクトの通り) を介してそれらをソートする方法がわかりません。

編集

コードをもう少し明確にするには:

contracts : Ember.computed.alias('model.contracts'),
street: Ember.computed.alias('realty.street'),

sortOrder: ['realty.street'],
sortedOwnedRealties: Ember.computed.sort('contracts.@each.street', function (a, b) {
    console.log(Ember.get(a, 'id'));
    console.log(Ember.get(a, 'street'));

    //return 1;
})

その関数undefinedは のコンソールに出力されstreetますが、正しいid.

わかりやすくするために、名前を に変更objectしました。realty

4

1 に答える 1

4

それらはおそらくPromiseObject両方でEmber.Objectあり、Promiseです。あなたが行ういくつかのことは、良い考えではないかもしれません:

最初objectは予約済みのキーワードです。という名前のモデルまたは関係を持つことは、うまくobjectいく可能性があるとしても、良い考えではありません。

次に、計算されたプロパティの依存関係キーが間違っています。'modelcontracts.@each.object.street'実際にはの代わりに のようなものが必要ですが'modelcontracts'、はサポートされていないため機能しません。'@each.a.b'解決策は、コントラクトのストリートへのエイリアスを作成することです:

street: Ember.computed.alias('object.street'),

そして、これを依存関係キーとして使用できます: modelcontracts.@each.street.

次に、カスタム コンパレータ関数でa.street、ドット表記でアクセスします。これは機能せず、ember オブジェクトでは信頼できません。.get()プロパティへのアクセスには常に次を使用します。

import Ember form 'ember';
const {get} = Ember;


function(a, b){
  if(get(a, 'street') > get(b, 'street')) {...}
}

computed.aliasただし、上記の がないとget(a, 'street')、 butではないことに注意してget(a, 'object.street')ください。


コードが機能しない問題は、おそらくobject非同期でロードされているため、CP が評価された時点ではストリートがまだロードされていません。正しい依存関係キーを追加すると、おそらくこれが修正されます。

于 2016-10-05T12:50:15.490 に答える