0

Rails 3.2 + ActiveModel ::Serializersの上でember-data-latest.js、リビジョン4、RESTAdapterを使用します。

関連するEmber.jsスニペット:

App.List = DS.Model.extend({
    name:   DS.attr('string'),
    people: DS.hasMany('App.Person')
});

App.Person = DS.Model.extend({
    name: DS.attr('string'),
    list: DS.belongsTo('App.List')
});

App.router = Ember.Router.create({
    enableLogging: true,
    root: Ember.Route.extend({
        index: Ember.Route.extend({
            route: '/',
            redirectsTo: 'lists'
        }),
        lists: Ember.Route.extend({
            route: '/lists',
            connectOutlets: function (router) {
                router.get('applicationController').connectOutlet('lists', App.store.findAll(App.List));
            },
            showList: Ember.Route.transitionTo('list')
        }),
        list: Ember.Route.extend({
            route: '/lists/:id',
            serialize: function(router, context){
                return {id: context.get('id')};
            },
            deserialize: function(router, urlParams){
                return App.store.find(App.List, urlParams.id);
            },
            connectOutlets: function (router, context) {
                router.get('applicationController').connectOutlet('list', context);
            }
        }),
        showLists: Ember.Route.transitionTo('lists')
    })
});

アプリを読み込むと、リストのインデックスページから始まり、バックエンドの/ listsにアクセスしてデータを取得します(各リストの子IDを含めます)。リストをクリックすると、リスト表示ページに移動します。そのテンプレートには、次のものがあります。

{{#each person in people}}
  <li>{{person.name}}</li>
{{/each}}

そのとき、個人データをフェッチするためにバックエンドに次のような呼び出しを行います。

/people?ids[]=4&ids[]=5&ids[]=6

私の質問は次のとおりです。次のように、より適切にスケーリングするサナーメソッドを使用するように動作を変更するにはどうすればよいですか。

/people?list_id=1

また:

/list/1/people

リストには何千人もの人がいる可能性があり、すべてのIDのリストを含むURLを生成するのは悪い考えのようです...

4

1 に答える 1

1

リストのAPI応答に子の個人IDを含めないでください。これにより、peopleAPI呼び出しが希望どおりに機能するようになるはずです。

于 2012-09-17T00:01:51.907 に答える