与Ember.js和Ecwid的URL片段(#)冲突
Conflict with Ember.js and URL fragment (#) with Ecwid
我正在使用Ecwid与Ember.js应用程序,我遇到了冲突。简而言之,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路由。
我尝试了一条全面的烬路线,但这并没有真正起作用,因为烬状态会随着我所在的页面而变化。
有没有人不得不处理第二个库,与烬在URL上战斗?如果是,您是如何维护状态和处理其他应用程序的?随着pushState和URL片段变得越来越流行,我可以想象这将变得越来越相关。
你真的必须在两者之间做出选择,如果它们都使用url进行某种性质的路由,那么它们都依赖于一些基本url的概念,并且具有不断变化的哈希值。在Ember中,你可以禁用位置路由,但是你会失去Ember的路由能力。
要禁用路由,只需使用NoneLocation
NONELOCATION
使用NoneLocation会导致Ember不存储实际URL中的应用URL状态。这通常用于测试目的,并且是调用时所做的更改之一App.setupForTesting () .
App.Router.reopen({
location: 'none'
});
我意识到,当我说这个,我部分说谎,因为你可以使用浏览器history
代替哈希。所以你的url会变成这样:
/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
根据指南,你可以告诉Ember不要使用URL与你的应用程序交互。
http://emberjs.com/guides/routing/specifying-the-location-api/直接从那里的文档-
最后,如果您不希望浏览器的URL与您的应用程序,你可以完全禁用位置API。这是对测试很有用,或者当你需要用路由器管理状态时,但暂时不希望它与URL混淆(例如当你把你的应用嵌入到一个更大的页面中)。
App.Router.reopen({
location: 'none'
});
- Javascript-ID冲突的几率
- 如何正确地使这个js片段内容不可知
- 导致内容安全策略(CSP)冲突错误的本地jquery.js文件
- Pg承诺性能提升:在冲突中
- 具有服务器端呈现的HTML片段的主干模型
- 数据与Javascript中的继承冲突
- Angular ng控制器与ng应用程序冲突
- 我的html表单无法验证.请参阅代码片段中的html代码和java脚本
- 返回按钮代码段的Jquery冲突
- 调试一个简单的jQuery函数;想知道是否与其他代码冲突
- 使用JavaScript和HTML5画布进行冲突检测
- javascript对象原型与jquery冲突
- jQuery与导航菜单上的mouseover事件冲突.
- Javascript滑块不滑动,如何判断是否存在JS冲突
- Bing语音和Bing地图在Windows 8应用商店应用程序中冲突
- 麻烦将coffee脚本片段移动到rails中自己的类中
- 片段uri's未在浏览器上执行
- 使用Javascript/jQuery以编程方式将当前锚点/哈希/片段附加到任何表单操作url
- Javascript两个日期选择器冲突
- 与Ember.js和Ecwid的URL片段(#)冲突