【问题标题】:Conflict with Ember.js and URL fragment (#) with Ecwid与 Ember.js 和与 Ecwid 的 URL 片段 (#) 冲突
【发布时间】:2014-05-29 22:46:38
【问题描述】:

我在 Ember.js 应用程序中使用 Ecwid,但遇到了冲突。简而言之,Ecwid 会加载一些将电子商务商店嵌入页面的 JavaScript。问题在于 Ecwid 和 Ember 都修改了 URL 片段以跟踪状态,因为 Ecwid 本质上是它自己的单页应用程序。基本上,我有两个不同的 JS 库争夺 URL。

因此,当我使用 Ecwid 组件时,URL 会更改为 Ecwid URL,并且 Ember 会向 Assertion failed: The route !/~/category/id=2104219&offset=0&sort=normal was not found 抱怨,因为那是 Ecwid 路由,而不是 Ember 路由。

我尝试了一个包罗万象的 Ember 路由,但这并没有真正奏效,因为 Ember 状态从我所在的页面改变了。

是否有人不得不处理与 Ember 争夺 URL 的第二个库?如果是这样,您是如何维护状态并处理其他应用程序的?随着 pushState 和 URL 片段变得越来越流行,我可以想象这将变得越来越相关。

【问题讨论】:

  • 真的,您将不得不在两者之间进行选择,如果它们都使用 url 进行某种性质的路由,那么它们都依赖于基本 url 的某些概念,并具有不断变化的哈希值。在 Ember 中,您可以禁用位置路由,但随后您将失去 ember 的路由功能。
  • 这就是我害怕的:/好吧,在我的情况下,Ecwid 是一个硬要求,所以 Ember 必须去:*(为了得到答案,你能不能发布如何打开Ember 的路由功能?

标签: javascript ember.js pushstate


【解决方案1】:

确实,您将不得不在两者之间进行选择,如果它们都使用 url 进行某种性质的路由,那么它们都依赖于基本 url 的某些概念,并具有不断变化的哈希值。在 Ember 中,您可以禁用位置路由,但随后您将失去 ember 的路由功能。

要禁用路由,您只需使用NoneLocation

无定位

使用 NoneLocation 会导致 Ember 不存储 实际 URL 中的应用程序 URL 状态。这一般用于 测试目的,并且是调用时所做的更改之一 App.setupForTesting()。

App.Router.reopen({
  location: 'none'
});

我意识到我这么说,我在部分撒谎,因为您可以使用浏览器history 而不是哈希。所以你的网址会像这样改变:

/emberHome/fooResource
/emberHome/fooResource/fooBar

而不是

/emberHome/#/fooResource
/emberHome/#/fooResource/fooBar

不幸的是,这有一些主要缺点,首先您的服务器需要知道在 /emberHome 上为您的 ember 应用程序提供服务,并且基本上忽略所有嵌套位置。其次,浏览器支持相当新(http://caniuse.com/history)。第三,不支持识别Ecwid的支持,在转换到不同的路线时可能会被炸掉。

App.Router.reopen({
  location: 'history'
});

您可以在http://emberjs.com/api/classes/Ember.Location.html#toc_historylocation了解更多信息

【讨论】:

    【解决方案2】:

    根据指南,您可以告诉 Ember 不要使用 URL 与您的应用程序交互。

    http://emberjs.com/guides/routing/specifying-the-location-api/

    直接来自那里的文档 -

    最后,如果您不希望浏览器的 URL 与您的 应用程序,您可以完全禁用位置 API。这是 对测试很有用,或者当您需要使用路由器管理状态时, 但暂时不希望它与 URL 混淆(例如,当 您将应用程序嵌入到更大的页面中)。

    App.Router.reopen({
      location: 'none'
    });
    

    【讨论】:

      猜你喜欢
      • 2016-11-14
      • 2011-11-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-03-12
      • 2022-01-10
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多