0

私はいくつかのユースケースでルーターv2でemberjsを使用しましたが、それは本当にうまく機能します。{{linkto ..}}構造(関連するネストされたリソースを含む)をクリックすることでページの複雑さが増すユースケースには問題はありません。

ただし、2つ(またはそれ以上)の異なるモデルを同時に表示できる必要がある場合もあります。

例えば:

モデルの人とモデルのペットがいます。

何かのようなもの:

 DS.RESTAdapter.configure("plurals",{"person" : "people"})

 App.Store = DS.Store.extend({
revision: 11,
  adapter: DS.RESTAdapter.create({namespace: 'restservice'})
 });

 var attr = DS.attr;

 App.Person = DS.Model.extend({
firstName: attr('string'),
lastName: attr('string'),
birthDay: attr('string'),
    pets: DS.hasMany('App.Pet')
 });


App.Pet = DS.Model.extend({
  name: attr('string'),
  species: attr('string'),
  person: DS.belongsTo('App.Person')
});

何らかの理由でModelPersonとPetのインスタンスが存在しますが、これら2つのモデル間の関係はまだ定義されていません。

{{linkto ..}}コンストラクトを介して呼び出されるページで、person-petassignmenteditorを実装します。この場合、2つのリストを表示したいと思います。

  • 人々のリスト
  • ペットのリスト

通常、このページのルートは1つのモデルにのみ対応しますが、人(ペットの割り当て編集者)の場合、両方のモデルを一度に表示するのは完全に自然です(追加のユーザー介入なしで)。

それを実装するための最良の方法は何ですか。ルーティングの概念なしでモデルをロードする必要がありますか?

このような方法が存在しますか:

      (represent the person - pet assigment editor 'page')
                         |
                         |

{{linkto ..}} -------> resource-route ----->'splitting redirect'

                                          - ----------------> resource-route  person

                                          - ----------------> resource-route  pet


   (like a url to a frame set which bear two (or more) 'parallel' requests)  

リダイレクトを分割した後、3つのアクティブなルートがあります。

  • 人のためのリソースルート-ペット割り当て編集者
  • リソースルート担当者
  • リソースルートペット

その後、通常の増分ドリルダウン(より深いネスティングルート:人の選択、ペットの選択..)アクションを実行できます。

このような概念がなくてもユースケースを実装できますが、ルーティングの概念が好きで、より複雑なシナリオで使用することに興味があります。

このようなコンセプトはありますか?そのようなシナリオに対処するためのemberjsの方法は何ですか?

よろしくお願いします

アンドレアス

4

1 に答える 1

2

分割リダイレクトは正しい考えではないと思います。ルーターを使いすぎています。これにより、問題が必要以上に複雑になります。人とペットの割り当てのルートを作成し、そこにペットと人を表示することをお勧めします。このルートのモデルは、関連するすべてのペットと人物になります。それでも2種類のモデルです。メソッドで2つのモデルを指定する適切な方法がわからないため、次の場所にモデルmodelをロードすることをお勧めしますsetupController

App.PetsToPersonRoute = Em.Route.extend({
    setupController: function (controller) {
        controller.setProperties({
            pets: App.Pet.find(),
            persons: App.Person.find()
        });
    }
});
于 2013-02-13T21:29:26.170 に答える