【问题标题】:Open a new window on click with ember使用 ember 单击时打开一个新窗口
【发布时间】:2012-12-21 23:11:41
【问题描述】:

当用户点击链接时如何打开一个新窗口?

我尝试添加 target="_blank" 和 bindAttr 但它不起作用。

不起作用的代码:

<a target="_blank" {{action goToSettings href=true}}>App Settings</a>

<a {{bindAttr target="_blank"}} {{action goToSettings href=true}}>App Settings</a>

这是第一个示例的 html 输出:

<a target="_blank" href="#/settings" data-ember-action="5">App Settings</a>

【问题讨论】:

  • 你能显示出不起作用的代码吗?
  • 您能向我们展示您的第一个示例的输出 html 吗?
  • 您实际上是在调用应用程序中的函数。 goToSettings 是做什么的?除非您在该函数中明确编写代码,否则它的设置方式永远不会打开新窗口。如果您希望这是一个链接,请将 URL(路由?)设置为 href 属性
  • 是的,这个功能在我的路由器中:goToSettings: Ember.Route.transitionTo('root.settings'),

标签: ember.js


【解决方案1】:

你有两个选择:

  1. 发送一个动作,并在处理该动作的javascript中调用 window.open(...) 打开一个指向特定 URL 的新窗口
  2. 不要使用操作,而是将其设为静态链接,或者如果您需要 动态改变目标 URL,使用<a target="_blank" {{bindAttr href="yourBoundPropForTheUrl"}}>Click here</a>

【讨论】:

  • 第一种方法的问题是我只想在特定情况下打开一个新窗口。对于所有其他操作,我希望它在同一个窗口中。我不确定我是否理解第二种选择。 yourBoundPropForTheUrl 会是什么?
  • 在第一种方法中,您仍然可以使用一些条件逻辑来决定是打开一个新窗口还是转换到另一个状态。对于第二个选项,我们的想法是 yourBoundPropForTheUrl 将是一个解析为您要打开的 URL 的属性。
  • 如果您还没有使用在 LinkView 中支持此功能的 Ember 版本,您可能还在思考如何生成对 Ember 的路由逻辑有效的 URL。正如@LukeMelia 在他对this question 的回答中提供的,您可以访问路由器以基于类似于您将使用transitionToRoute 的参数生成URL。以下是控制器操作中的示例:this.get('target').router.generate('item', item.topic_id, item.id);
【解决方案2】:

这已添加到 LinkView,因此现在直接在 {{link-to}} 中得到支持。

拉取请求在https://github.com/emberjs/ember.js/pull/4718

【讨论】:

    猜你喜欢
    • 2019-04-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-11-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-01-23
    相关资源
    最近更新 更多