我的应用程序有一个常见的加载Ux,在加载过程中我希望我的大多数路由做一件事,显示一个微调器。为了实现这一点,我通过覆盖加载方法将该行为一直放到ApplicationRoute:
App.ApplicationRoute = Ember.Route.extend({
actions: {
loading: function() {
console.log("Show loading spinner");
return true;
}
}
});
但是,我的一个嵌套路线我想做一些更自定义而不显示微调器的东西,而是使用自定义模板。我希望覆盖该嵌套级别的加载,而不是将加载消息冒泡到ApplicationRoute,但这会产生不渲染模板的负面影响。如果我冒泡了,那么我看到了我的模板,我看到了一个加载微调器。
JS-fiddle强调了这个问题:http://jsfiddle.net/ssirowy/P8azn/4/
我的方法在哪里错了?我应该在所有路由中实现'loading'并调用loadSpinner方法,但我感兴趣的嵌套路由除外?还有其他方法吗?
谢谢,
答案 0 :(得分:0)
所以经过一段时间的努力,我最终以不同的方式实现了上述内容。我没有在ApplicationRoute中捕获所有路径并显示微调器,而是在ApplicationController上实现了一个名为showSpinner的基本方法,然后所有想要显示微调器的路径必须通过实现加载和调用showSpinner方法来选择。
App.ApplicationController = Ember.Controller.extend({
//... other functionality
// Methods to show a spinner in main body of app
showSpinner: function() {
console.log('SPINNER!');
}
};
因为我有几条路线实现了这种精确的加载行为,所以我创建了一个简单的mixin来显示覆盖加载方法的微调器:
App.ShowSpinner = Ember.Mixin.create({
actions: {
loading: function(transition, originRoute) {
this.controllerFor('application').showSpinner();
return true;
}
}
});
并通过这样做来利用它:
App.RouteThatWantsSpinner = Ember.Route.extend(App.ShowSpinner, {
model: function() {
return something;
}
});
另一个更符合原始问题的答案会很棒,但此解决方案现在适用于我