Ember.js: 无法在2.10上设置“错误”路由

创建于 2016-11-29  ·  29评论  ·  资料来源: emberjs/ember.js

Ember.js默认设置“错误”路由,但route-recognizer不再允许重复路由:
https://github.com/tildeio/route-recognizer/blame/5d54688f04273d3a921470b903a36266dddcdaf2/dist/route-recognizer.js#L525 -L531

这样做会使您的控制台空白,并显示一个错误:

Uncaught Error: You may not add a duplicate route named `error`

默认的“错误”路由在此处设置:
https://github.com/emberjs/ember.js/blob/10857fd98008bb47bd63bfe3d21b0fc224a197a5/packages/ember-routing/lib/system/dsl.js#L49 -L50

您可以通过尝试使用ember g route error处理error路线来对其进行测试。
该功能在2.9中效果很好。

Bug Ember 2.10 Has Reproduction

最有用的评论

在2.11.1中已修复

所有29条评论

@ diamondo25能否在Twiddle中复制?

我也看到了这一点,我不记得在昨天的最新Beta版中看到过它

似乎是合法的。 这是由于我进行了route-recognizer更改。 如果用户已经创建了默认创建,则需要将其锁定。 (我知道如何解决,将会解决。)

交联: https :

@nathanhammond感谢您如此迅速地解决问题! @rwjblue我标记为“错误”,也许这个问题可以在即将发布的2.10.1版本中解决。

那不是解决办法,@ pixelhandler! 那就是引入错误的地方。 once这确实需要固定的点释放,但是在返回路由器之前,还有一些其他事情要解决。 (我要解决5个未解决的问题。)

这个人有地位吗?

我们遇到了将Bustle应用程序升级到2.10的问题,我们需要重构根error路由以使用不同的名称,或者推迟升级到2.10。

我们也对该错误的状态感兴趣。 我们暂时暂不升级到2.10。

我希望我可以通过不显式注册error路由并将错误模板,路由等保留在适当的位置来解决此问题。 我尝试了一下,发现:

  • 在失败的路由挂钩上,路由器将冒泡跳到错误路由,并显示我的自定义模板。
  • 故意过渡到错误时,路由器不会过渡到我的模板。 有趣的是,它不记录您在不存在路由时收到的错误消息。

我在想,也许我可以将模板,路由,控制器等保留在原处,并为我明确处理的错误情况注册一个指向同一模板的自定义错误路由。 也许这可以使用我的自定义模板处理捕获和未捕获的错误。

@nathanhammond-您对以上内容有任何想法吗? 值得黑客攻击还是值得等待正式修复?

没关系 :(

上述提议仍将需要error映射,并会触发此错误。

我可能只是为处理的错误创建了自定义路由,并在error模板中使用了相同的错误组件。

似乎是尚待解决的唯一其他方法。

CC: @nathanhammond

我注意到该问题已在ember v2.12.0-beta.1中修复,是否有机会将该修复程序反向移植到2.11版本? 自从2.12 Beta以来,引入了许多新问题。

自从2.12 Beta以来,引入了许多新问题。

请报告您在Beta周期发现的任何问题!

是否有机会将此修复程序反向移植到2.11版本?

是的,我认为这是个好主意。

似乎在0.3.x系列的v0.2.9 +中已使用27c0f579b21d93对此进行了注释。

@rwjblue是否也可以将其修补回2.11或2.10? 我不确定确定哪个错误在哪个版本中进行修补的过程。

在2.11.1中已修复

是否以不同于beta.1的方式解决此问题? 刚刚尝试了2.11.1,那仍然给我一个关于“ hotel.error”的重复路线错误,而beta版却没有。

@Glennvd-是的,它们是路由识别器的不同版本(2.11为0.2.9,2.12为0.3)。 我可能以某种方式将其弄糊涂了。 您能否共享2.11所得到的错误和堆栈跟踪? 另外,可能还有旋转和/或演示回购吗? 一旦发现我做错了什么,我很高兴发布2.11.2。

@rwjblue我在这里有一个旋转,只需要更改为正确的余烬版本https://ember-twiddle.com/e4b8412bf5629483f94276a001598571

完整的堆栈跟踪(来自我自己的应用程序)如下。
add (ember.debug.js:55618) (anonymous) (ember.debug.js:57247) (anonymous) (ember.debug.js:55191) eachRoute (ember.debug.js:55179) eachRoute (ember.debug.js:55177) eachRoute (ember.debug.js:55177) map (ember.debug.js:55190) map (ember.debug.js:57244) _initRouterJs (ember.debug.js:27511) setupRouter (ember.debug.js:27606) startRouting (ember.debug.js:27592) startRouting (ember.debug.js:2887) didBecomeReady (ember.debug.js:3867) invoke (ember.debug.js:337) flush (ember.debug.js:405) flush (ember.debug.js:529) end (ember.debug.js:599) run (ember.debug.js:722) join (ember.debug.js:744) run.join (ember.debug.js:22286) (anonymous) (ember.debug.js:22349) mightThrow (jquery.js:3570) process (jquery.js:3638) nrWrapper ((index):97)
错误仍然是相同的Uncaught Error: You may not add a duplicate route named hotel.error .

@rwjblue运行

grep --recursive "RouteRecognizer.VERSION" node_modules/ember-source

退货

node_modules/ember-source/dist/ember.debug.js:RouteRecognizer.VERSION = '0.2.8';
node_modules/ember-source/dist/ember.js:RouteRecognizer.VERSION = '0.2.8';
node_modules/ember-source/dist/ember.prod.js:RouteRecognizer.VERSION = '0.2.8';

是的,问题在于发布了[email protected]并带有0.2.8的dist输出。 我在做这个工作...

@rwjblue ,先生,非常感谢。
有什么需要的话请告诉我!

好的,我用更新的dist输出发布了[email protected] ,然后撞到了发布分支(在https://github.com/emberjs/ember.js/commit/6c7e6950f127aa31912b5729971703c0c9615655),并在构建输出中进行了确认(在https://github.com/components/ember/commit/4a9c7361f4f546daf3ad342da6d196b5b4b6bf20中)。

然后,我通过@Glennvd共享的旋转消息确认,当使用release分支时,没有断言发生(应用程序启动)。

如果其他人可以在这里检查我,我可以发布2.11.2 ...

在上面。

@rwjblue原谅我的无聊,
我正在尝试建立我的项目

devDependencies: {
// ...
"ember-source": "git://github.com/emberjs/ember.js.git#6c7e6950f127aa31912b5729971703c0c9615655"
// ...

但失败了

$ ember build
⠋ Building
Cannot find module 'node_modules/ember-source/dist/ember-template-compiler.js'

我究竟做错了什么 :)?

@gmaliar ember-source在存储库中没有构建工件,因此您需要使用bower标记,或在本地克隆,构建和链接ember。

谢谢@locks
@rwjblue我可以确认它正在工作。

可以将其关闭,它可以在2.11.2上正常工作。

感谢您的确认!

此页面是否有帮助?
0 / 5 - 0 等级