在 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 似乎是个坏主意......