Javascript 与余烬发行';s加载子状态

Javascript 与余烬发行';s加载子状态,javascript,web,ember.js,Javascript,Web,Ember.js,我的应用程序有一个通用的加载Ux,在加载过程中,我希望我的大多数路由都能做一件事,显示一个微调器。为了实现这一点,我通过覆盖加载方法将该行为一直删除到ApplicationRoute: App.ApplicationRoute = Ember.Route.extend({ actions: { loading: function() { console.log("Show loading spinner"); return true

我的应用程序有一个通用的加载Ux,在加载过程中,我希望我的大多数路由都能做一件事,显示一个微调器。为了实现这一点,我通过覆盖加载方法将该行为一直删除到ApplicationRoute:

App.ApplicationRoute = Ember.Route.extend({
   actions: {
       loading: function() {
           console.log("Show loading spinner");
           return true;
       }
   } 
});
App.ShowSpinner = Ember.Mixin.create({
    actions: {
        loading: function(transition, originRoute) {
           this.controllerFor('application').showSpinner();
           return true;
        }
    }
});
但是,在我的一个嵌套管线中,我希望执行更自定义的操作,而不是显示微调器,而是使用自定义模板。我希望在该嵌套级别重写加载,并且不会将加载消息冒泡到ApplicationRoute,但这会产生不呈现模板的不利影响。如果我冒泡,那么我会看到我的模板和加载微调器

突出问题的JS小提琴如下:

我的方法哪里错了?我是否应该在所有路由中实现“加载”,并调用loadSpinner方法(感兴趣的嵌套路由除外)?还有其他方法吗


谢谢,

因此,经过一段时间的努力,我最终以不同的方式实现了上述功能。我没有捕获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.ApplicationRoute = Ember.Route.extend({
   actions: {
       loading: function() {
           console.log("Show loading spinner");
           return true;
       }
   } 
});
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;
    }
});
另一个更符合原始问题的答案会很好,但这个解决方案现在对我有效