您可以在控制器启动中添加一个方法,该方法将读取玩家数量并使用所有控制器都可用的 transitionToRoute 函数将用户转发到适用的路线。
start: function(numberOfPlayers) {
App.gameConfiguration = updateGameConfigurationBasedOnNumberOfPlayersParamAndBoundVariables();
this.transitionToRoute('games.start');
}
这将导致用户被转发到 /games/start 路由。url 中没有上下文或动态段,但使用此方法依赖于一些逻辑,该逻辑已初始化启动游戏所需的游戏配置。
您也不必将所有属性都传递给start函数。您可以将模板上的输入字段绑定到模型中的属性,然后在start函数中使用这些绑定值来创建游戏配置。
对此的一个变体是为路由提供上下文/在 url 中指定一个动态段。那么您的启动函数可能如下所示:
start: function(gameConfiguration) {
this.transitionToRoute('games.start', gameConfiguration);
}
这会将用户转发到如下 URL:/games/:game_configuration_id/start,其中 game_configuration_id 指的是 DS.Model 的 id,它表示由玩家数量和任何其他特征组成的特定游戏配置。
您可以通过迭代模板中的游戏配置集来设置它,将 game_configuration 传递给每个链接。这样的事情就足够了:
{{#each game_config in model}}
<button {{action "start" game_config}} type="button" />
//This would be the equivalent of doing:
//<#linkTo 'games.start' game_config>
{{/if}
对于此配置,您需要一个GamesStartRoute,例如:
App.GamesStartRoute = Ember.Route.extend({
model: function(params) {
return GameConfiguration.find(params.game_configuration_id);
}
});
希望这可以帮助