我正在学习Ember,我正在寻找以下方法:
用户可以从3个按钮中选择设置新游戏:2个玩家,3个玩家或4个玩家。单击一个将转到下一个屏幕,其中游戏开始于所选的号码。球员。
你如何在Ember做到这一点?我可以使用操作完成它:
<button {{action "start" 2}} type="button" />
<button {{action "start" 3}} type="button" />
<button {{action "start" 4}} type="button" />
这样我就可以在控制器的start()方法中读取参数。
但我想转换到新的网址,为此我需要{{linkTo}}
,不是吗?但是,如何将基于按钮的值传输到新的Route / URL?所以一个更普遍的问题是:有没有办法将一些变量“POST”或“获取”给新的Route / URL?有点像传统的表单和重定向。我看了动态片段,但不是我想的那样。
答案 0 :(得分:4)
您可以向控制器 start 添加一个方法,该方法将读取玩家数量,并使用所有控制器可用的transitionToRoute功能将用户转发到适用的路线。
start: function(numberOfPlayers) {
App.gameConfiguration = updateGameConfigurationBasedOnNumberOfPlayersParamAndBoundVariables();
this.transitionToRoute('games.start');
}
这将导致用户被转发到/ games / start route。 url中没有上下文或动态段,但使用此方法依赖于某些逻辑已初始化启动游戏所需的游戏配置。
您也不必将所有属性都传递到 start 函数中。您可以将模板上的输入字段绑定到模型中的属性,然后在 start 函数中使用这些绑定值来创建游戏配置。
这方面的一个变体是为路径提供上下文/在url中指定动态段。然后你的 start 函数可能如下所示:
start: function(gameConfiguration) {
this.transitionToRoute('games.start', gameConfiguration);
}
这会将用户转发到以下网址:/ 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);
}
});
希望这有帮助