Ember.js 余烬服务和浏览器重新加载结果为;无法获取/foo";具有自定义余烬位置
TL;DR:将自定义位置类型添加到Ember.js 余烬服务和浏览器重新加载结果为;无法获取/foo";具有自定义余烬位置,ember.js,Ember.js,TL;DR:将自定义位置类型添加到environment.js中,然后ember-service->打开浏览器发送/foo->无法获取/foo 按照处的说明,将代码完全复制到名为app/locations/history url logging.js的文件中,并在config/environment.js中添加了一行内容,内容如下: ENV.locationType = 'history-url-logging'; 供参考,文件中给出的代码简单如下: import Ember from 'em
environment.js
中,然后ember-service
->打开浏览器发送/foo->无法获取/foo
按照处的说明,将代码完全复制到名为app/locations/history url logging.js的文件中,并在config/environment.js
中添加了一行内容,内容如下:
ENV.locationType = 'history-url-logging';
供参考,文件中给出的代码简单如下:
import Ember from 'ember';
export default Ember.HistoryLocation.extend({
implementation: 'history-url-logging',
pushState: function (path) {
console.log(path);
this._super.apply(this, arguments);
}
});
我决定重新启动服务器,按照通常的CTRL+C
对ember s
执行操作,然后再次执行ember s
。我回到位于其中一条路线上的浏览器,点击F5
,收到一个神秘的错误:
无法获取/联系人
所以,在谷歌搜索和反复尝试之后(在这里发布了我刚才用您正在阅读的文本编辑的一个问题),我发现要修复这个错误,我所要做的就是删除配置行ENV.locationType='history url logging'
,重新启动服务器(ember s
),突然应用程序工作正常
更奇怪的是,如果我在environment.js
中启动应用程序时没有这一行,那么一旦应用程序运行(浏览器窗口重新加载正常,等等),我就会重新添加一行,上面写着ENV.locationType='history url logging'代码>(触发实时重新加载),应用程序仍然可以正常工作!(例如,点击F5重新加载页面不会让我看到“无法获取/联系人”(或任何路由)错误。)当然,控制台会按照上述代码的预期为我提供“console.log”输出
所以,不管是长是短,使用自定义位置似乎完全搞砸了余烬服务,这真是令人伤心和沮丧!有没有办法解决这个问题?Ember内置服务器查看environment.js locationType属性,确定它是否必须在rootURL路径之后提供路由服务。默认情况下,如果locationType为history
,它将执行此操作。它使用字符串匹配
在您的例子中,您编写了自己的位置,因此environment.js中的locationType属性继承自HistoryLocation,现在是历史url日志记录
。内置服务器仅凭名称无法将其识别为基于历史的位置形式。它将默认为散列位置。它不会分析你的代码
对于这种情况,我们必须帮助内置服务器理解locationType等同于历史位置。
您需要在locationType属性之后的environment.js文件中添加historySupportMiddleware:true
。页面堆栈的实现来自哪里?我认为实现字符串应该与文件名相同,这意味着“历史url日志记录”
。很抱歉,您完全正确,这是我粘贴副本时的一个错误。在恢复代码进行测试之前,我复制了代码。在测试中,实现
是历史url日志记录
,保证它。还是一样的问题。:/我将编辑我的问题,这样其他人就不会感到困惑了-谢谢你抓住了这一点。欢迎来到堆栈溢出!你能解释一下你的解决方案为什么/如何帮助回答OP的问题吗?@MattShepherd我明白你的意思。我编辑了我的回复。希望这会有所帮助。