什么是Ember相当于POST'n重定向?

时间:2013-02-06 18:31:00

标签: ember.js

我正在学习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?有点像传统的表单和重定向。我看了动态片段,但不是我想的那样。

1 个答案:

答案 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);
  }
});

希望这有帮助