0

リストのリストを結合したリストを表示しようとしています。

私のモデル

ムービーをライブラリにリンクする 2 つの hasMany リレーションを取得しました

+---------+  hasMany   +---------+  hasMany   +-------+
| Library | ---------> | Storage | ---------> | Movie |
+---------+            +---------+            +-------+

Javascript :

App.Library = DS.Model.extend({
    name : DS.attr(),
    storages : DS.hasMany('storage', {async:true})
});

App.Storage = DS.Model.extend({
    hostname : DS.attr(),
    login : DS.attr(),
    password : DS.attr(),
    name : DS.attr(),
    movies: DS.hasMany('movie', {async:true})
});

App.Movie = DS.Model.extend({
    name: DS.attr()
    duration : DS.attr()
});

ライブラリは私の AppController にロードされます:

App.ApplicationController = Ember.Controller.extend({
  data: function() {
    return this.get('store').find('library', 1);
  }.property()
});

問題

私がやろうとしているのは、ライブラリのすべての映画のリストを名前順に表示することです。私はそのようなことを試しましたが、うまくいきません:

App.LibraryController = Ember.ArrayController.extend({
  needs: ['application'],
  sortProperties : [ 'name' ],
  sortAscending : true,

  model: function() {
    var storages = this.get('controllers.application.data.storages');
    if (storages) {
      return storages.mapBy('cpls').reduce(function(accum, items) {
        return accum.pushObjects(items);
      }, Ember.ArrayController.create({}));
    }
    else {
      return [];
    }
  }.property('controllers.application.data.storages.@each')
});

しかし、このアプローチにはいくつかの問題があります。

  • 明らかに、それは機能していません
  • 1 つのムービーが追加または削除された場合、1 つのエントリを変更するだけでなく、配列全体を再構築する必要があります。
  • プロパティは依存する必要がありますがcontrollers.application.data.storages.@each.movies.@each、EmberJS は @each の後にセレクターを追加することをサポートしていません (計算されたプロパティの末尾にある注を参照し、 @each を使用してデータを集計します) 。

ここでいくつかの指針が必要です。この問題を適切に解決する方法を知っている人はいますか?


編集 :

私の問題に関連するこの要点を見つけました複数のソース配列からのアイテムを結合するEmber.jsでのマージされた配列の実装

4

0 に答える 0