【问题标题】:Ember CLI path based on server response基于服务器响应的 Ember CLI 路径
【发布时间】:2015-07-27 11:25:54
【问题描述】:

我正在使用 Ember CLI 开发一个强大的 ember 应用程序,但我正在努力解决它的一些方面问题。

我想做的是:

  1. 显示选项的下拉列表
  2. 当用户选择一个选项时,将他们的选择发布到后端
  3. 来自服务器的响应包含基于用户在下拉列表中选择的数据。获得服务器响应后,我想转换到一条新路由,其中​​路径以服务器返回的值之一结束。

例如:

/path/to/dropdown -- 显示下拉列表供用户选择,然后将其发布到后端。除其他数据外,后端还响应:

 slug: <stringValue>

然后转换为: /path/to/slug -- 其中slug&lt;stringValue&gt;

到目前为止,我已经完成了上述 1 和 2 的工作,但我不知道如何使第 3 步工作。我尝试在/path/to/slug 路由和/path/to/dropdown 控制器中使用序列化函数,但它总是返回undefined

基于用户的下拉选择对服务器的 AJAX 调用发生在 /path/to/dropdown 控制器中。

我已将路由器设置为:

this.route('options', { path : ':slug' });

如果有人能指出我正确的方向,那就太好了;我希望我的例子足够清楚,但如果没有,请告诉我。

谢谢。

【问题讨论】:

    标签: ember.js ember-data ember-cli


    【解决方案1】:

    说实话,我不明白你为什么使用this.route('options', { path : ':slug' });。您刚刚为所有可能的选项创建了唯一的路线(实际上,为所有/anything 形式的网址),但这不是您想要的。

    我认为您的解决方案是this.transitionToRoute(url_string),它适用于任何控制器。检查 api 示例there。当然,在你应该在路由器中声明所有路由并为它们创建操作文件之前。

    如果您不想为每个可能的 slug 创建路线,那么您的路线非常好,但至少我会考虑再添加一个路径部分。例如,this.route('options', { path : '/slugs/:slug' });。 之后,您可以运行transitionTo 并将数据(以任何格式)传递给它。数据将分配给路由模型,您将能够在 SlugRoute(和 SlugController,如果您没有重新定义 setupControler 方法)中将其用作 this.get('model') 变量。

    如果你想从视图运行transition,首先你需要获取控制器并发送一个特殊的命令给它。

    【讨论】:

    • 谢谢德米特里!解决方案是通过 transitionToRoute 调用从服务器响应中传递 slug。然后路由器会拾取该值。我从您的评论中解决了这个问题“之后您可以运行 transitionTo 并将数据(以任何格式)传递给它。”
    猜你喜欢
    • 1970-01-01
    • 2012-04-16
    • 2015-05-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-09-16
    • 2021-06-11
    • 2015-06-14
    相关资源
    最近更新 更多