【问题标题】:EmberJS - How to dynamically generate link with linkTo?EmberJS - 如何使用 linkTo 动态生成链接?
【发布时间】:2013-04-07 22:04:23
【问题描述】:

有没有办法使用link-to 帮助程序通过传递带有路由路径的变量来动态生成链接?

例如,不要像这样硬编码路径:

{{#linkTo "route.subroute" model}}{{model.title}}{{/linkTo}}

我希望能够向 link-to 助手传递一个变量,该变量包含这样的路径:

{{#linkTo destination model}}{{model.title}}{{/linkTo}}

这样做的用例是允许我合并仅在此路径上有所不同的模板。例如,如果有两个集合,每个集合都有不同的目的地。使用 each 助手渲染时,模板除了 link-to 中的路径外是相同的。

如果我可以将这个变量保存在视图的控制器中并传递它,我可以只为两个列表使用一个模板。

我曾想过像这样手动构建路径:

<a {{bindAttr href="destination"}}>{{model.title}}</a>

但这并没有与路由器集成以确定我需要的活动状态。

【问题讨论】:

标签: ember.js


【解决方案1】:

有没有办法通过传递带有路由路径的变量来使用 linkTo 帮助器动态生成链接?

暂时没有。

这样做的用例是允许我合并仅在此路径上有所不同的模板。例如,如果有两个集合,每个集合都有不同的目的地。

同意这是一个有效的用例,我希望 linkTo 助手将来支持它。同时,由于您只有两个集合,您可以使用模板中的条件来完成此操作

{{#if isRouteOne}}
  {{#linkTo "routeOne.subrouteOne" model}}{{model.title}}{{/linkTo}}
{{else}}
  {{#linkTo "routeTwo.subrouteTwo" model}}{{model.title}}{{/linkTo}}
{{/if}}

【讨论】:

  • 好吧,我写了“两个”来简化问题;不幸的是,我实际上有 7 个。管理这么多布尔变量会相当乏味,但对于更简单的情况,我仍然喜欢将答案作为临时解决方法。
  • 大声笑同意 7 这不会很有趣。在这种情况下,编写一个小的车把助手可能是有意义的。希望提到的 PR @sly7_7 很快就会被合并。
【解决方案2】:

您可以使用{{action}} 代替{{linkTo}},并通过模型的destination 属性中指定的路由名称来处理转换事件。

【讨论】:

  • 他需要“积极”的支持。
【解决方案3】:

还有另一个非常相似的 SO Question,我在其中 answer 这个问题。使用link-to 助手的内联 版本可以解决此问题。

在这种情况下,我们会:

{{link-to model.title destination model}}

将被编译为:

<a href="#/route/subroute/3856">
  Click me
</a>

【讨论】:

    猜你喜欢
    • 2012-09-18
    • 1970-01-01
    • 1970-01-01
    • 2013-02-19
    • 1970-01-01
    • 2017-02-19
    • 2017-02-16
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多