2014-03-28 79 views
0

我的應用程序有一個共同的加載Ux在加載過程中我想我的大部分路線做一件事,顯示一個微調。要做到這一點,我放棄了這種行爲一路下跌到ApplicationRoute通過重寫加載方法:問題與Ember的加載子狀態

App.ApplicationRoute = Ember.Route.extend({ 
    actions: { 
     loading: function() { 
      console.log("Show loading spinner"); 
      return true; 
     } 
    } 
}); 

但是,我嵌套的路線之一,我希望做一些更多的自定義,並沒有表現出微調,而是使用自定義模板。我期望覆蓋該嵌套級別的加載,並且不會將加載消息向上吹至ApplicationRoute,但是這具有不呈現我的模板的不利影響。如果我冒出來,然後我看到我的模板,我看到一個加載微調。

一個JS-小提琴突出的問題是在這裏:http://jsfiddle.net/ssirowy/P8azn/4/

哪裏是我的做法錯在這裏?我是否應該在所有路線中實現「加載」並調用loadSpinner方法,但我感興趣的嵌套路線除外?任何其他方法?

感謝,

回答

0

所以用這個掙扎了一下後,我結束了不同的執行上述。我沒有在ApplicationRoute中捕獲所有路線並顯示微調器,而是實現了一個名爲showSpinner的ApplicationController的基本方法,然後所有要顯示微調器必須加載並調用showSpinner方法的路徑。

App.ApplicationController = Ember.Controller.extend({ 

    //... other functionality 

    // Methods to show a spinner in main body of app 
    showSpinner: function() { 
     console.log('SPINNER!'); 
    } 
}; 

因爲我有幾個途徑實現此確切的裝載行爲,並沒有別的,我創建了一個簡單的混入用於顯示重寫加載方法微調:

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; 
    } 
}); 

是更符合原來的問題行另一個答案將是巨大的,但這種方法現在對我的作品