Ember 相当于 POST 'n 重定向?



我正在学习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()方法中的参数。

但我想转换到一个新的URL,为此我需要{{linkTo}},不是吗?但是,如何将基于按钮的值传输到新的路由/URL?因此,一个更普遍的问题是:有没有办法将一些变量"POST"或"GET"到一个新的Route/URL?有点像传统形式的帖子和重定向。我看了动态片段,但我认为这不是我想要的。

您可以向控制器添加一个方法start,该方法将读取玩家数量,并使用所有控制器都可用的transitionToRoute功能将用户转发到适用的路线。

start: function(numberOfPlayers) {
  App.gameConfiguration = updateGameConfigurationBasedOnNumberOfPlayersParamAndBoundVariables();
  this.transitionToRoute('games.start');
}

这将导致用户被转发到/游戏/开始路线。url中没有上下文或动态片段,但使用这种方法依赖于一些逻辑,这些逻辑已经初始化了启动游戏所需的游戏配置。

您也不必将所有属性传递到start函数中。您可以将模板上的输入字段绑定到模型中的属性,然后在start函数中使用这些绑定值来创建游戏配置。

这方面的一个变体是为路由提供上下文/在url中指定动态段。然后您的启动功能可能如下所示:

start: function(gameConfiguration) {
  this.transitionToRoute('games.start', gameConfiguration);
}

这将把用户转发到类似于:/games/:game_configuration_id/start的url上,其中game_config_id指代DS的id。Model表示由玩家数量和任何其他特征组成的特定游戏配置。

您可以通过在模板中的一组游戏配置上进行迭代来设置,并将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);
  }
});

希望这能帮助

最新更新