我正在使用Ember的PromiseProxyMixin和AJAX数据调用以及Ember RSVP Promises.我不想在每个路由/模板中加入错误处理,而是将拒绝的承诺冒充到Application路由中的错误处理程序,如下所示:
export default Ember.Route.extend({
actions: {
error: function(error, transition) {
return this.transitionTo('error');
return false;
}
}
});
Run Code Online (Sandbox Code Playgroud)
目前,如果承诺被拒绝,被拒绝的承诺似乎没有出现在Application路由中(这是因为PromiseProxyMixin附加到promise的.fail()函数并阻止进一步冒泡?如果是这样,有没有办法继续冒泡?)
是否可以使用PromiseProxyMixin并允许被拒绝的承诺冒泡到Application路由?
我们正在使用Ember CLI开发Chrome扩展程序,但是由于索引路由未正确触发,因此难以使路由/资源在Chrome中正常运行。
我们采取的步骤:
ember new myapp。ember build --environment production。通常,如果Ember应用程序托管在服务器上,则转到ember为该应用程序提供服务的位置,例如hxxp:// localhost:4200 /,将加载该应用程序,并且所有路由都将挂断该应用程序。
然而,因为它是一个Chrome扩展,它不会加载的index.html使用空路由时,这样会//(EXTENSION_ID)/:铬扩展提供了一个错误“此网页未找到”我推测Chrome 默认不会重定向到index.html。
如果将扩展名指向chrome-extension://(extension_id)/ index.html,它将加载Ember应用程序,但Ember会出现错误:
未捕获的UnrecognizedURLError:/index.html
解决此问题的一种方法是index.html在路由器中定义如下的路由,但这并不理想:
Router.map(function() {
this.resource('index', { path: '/index.html' });
});
Run Code Online (Sandbox Code Playgroud)
或者,您可以将位置类型更改为“哈希”:
locationType: 'hash'
Run Code Online (Sandbox Code Playgroud)
在这种情况下,无需上面的其他路由就可以进入index.html,但是路由如何能够与之抗衡?例如,转到chrome-extension://(extension_id)/ some_other_action绝对不会导致Ember App最初加载。
问题:如何在Chrome扩展程序中声明Ember路由?