在我的Ember.js应用程序中,我有一个类似于以下内容的模型:
MyApp.Game = DS.Model.extend({
season_type: DS.attr('string'),
gamedate: DS.attr('date'),
home_team_name: DS.attr('string'),
visiting_team_name: DS.attr('string'),
gametime: DS.attr('string'),
home_team: DS.belongsTo('team'),
visiting_team: DS.belongsTo('team'),
home_team_pitcher: DS.belongsTo('player'),
visiting_team_pitcher: DS.belongsTo('player'),
home_players: DS.hasMany('player'),
visitor_players: DS.hasMany('player')
});这在控制器"A“中工作得很好。在另一个控制器中,我们称它为控制器"B",理想情况下,我应该有另外两个属性可用,如下所示:
MyApp.Game = DS.Model.extend({
season_type: DS.attr('string'),
gamedate: DS.attr('date'),
home_team_name: DS.attr('string'),
visiting_team_name: DS.attr('string'),
gametime: DS.attr('string'),
home_team: DS.belongsTo('team'),
visiting_team: DS.belongsTo('team'),
home_team_pitcher: DS.belongsTo('player'),
visiting_team_pitcher: DS.belongsTo('player'),
home_players: DS.hasMany('player'),
visitor_players: DS.hasMany('player'),
home_all_players: DS.hasMany('player'),
visitor_all_players: DS.hasMany('player')
});在本例中,我添加了home_all_players和visitor_all_players。在这两个属性中有大量的数据需要跨越,我希望避免将其用于面向客户的控制器A。另一方面,控制器B是一个管理界面,管理员需要拥有home_all_players和visitor_all_players的访问权限,以便他们可以更新MLB球队的阵容。
处理这个问题的最干净的方法是什么?我猜在服务器端,在我使用Ruby on Rails的地方,我只会让序列化程序包含home_all_players和visitor_all_players,这取决于调用的路由。但是Ember.js端的建模保持不变,所以我不确定解决这个问题的最好方法是什么。
发布于 2014-05-13 02:56:47
我认为,这取决于你的整个应用流程和交互,如果你希望你的用户经历任何转换延迟或特定的用户体验,你需要访问一组特定的数据。
一般来说,我的后端负责为它的客户端提供最方便的API,这样他们就可以交付最好的UX,出于这个目的,你可以使用嵌入的数据,侧载的资源,新的资源定义,等等。
我在三种不同的方式上做了类似的事情:
1)发送查询参数,以便服务器知道如何序列化资源。
store.find('game', {id: 1, extend:'admin'});
store.find('game', {extend:'admin'});2)基于您当前的用户身份验证,您的服务器可以知道应该如何序列化资源。
//the server response would be different based on the auth header
store.find('game', 1);
store.find('game');3)添加一个新的资源来扩展您的资源。
MyApp.ExtendedGame = DS.Model.extend({
game: DS.belongsTo('game'),
home_all_players: DS.hasMany('player'),
visitor_all_players: DS.hasMany('player')
});https://stackoverflow.com/questions/23575932
复制相似问题