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。我相信这应该会导致人员 API 调用按您的意愿工作。

于 2012-09-17T00:01:51.907 回答