在我的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')
});发布于 2014-05-13 22:08:35
我想你需要扩展你的模型。
App.Game = DS.Model.extend({
...
});
App.AdminGame = App.Game.extend({
home_players: DS.hasMany('player'),
visitor_players: DS.hasMany('player')
});在本例中,您将拥有两个控制器和相关路由,它们是AdminGameController、GameController、GameRoute和AdminGameRoute。
您应该从相关路由中的服务器获取适当的模型。Rails应该根据控制器返回正确的模型。
发布于 2014-05-17 04:39:22
我使用查询参数,在rails端,ActiveModel::Serializer决定是否包含字段、字段数量、排序顺序等。我不确定我是否会考虑在客户端使用不同的控制器。
我即将开始一个类似的功能,更一般地对大量数据进行分页。我现在的想法是扩展DS.ManyArray并在meta中添加一些数据,包括loaded_count、total_count、offset等,所有这些都可以由API返回。默认值可能是加载20条记录,然后可以调用函数来添加更多记录,或者将窗口移动到另一个范围,以保持对内存的控制。或者,通过查询参数,将它们全部加载。
https://stackoverflow.com/questions/23575932
复制相似问题