2014-04-09 49 views
1

我希望能夠在我的Ember應用程序中處理javascript錯誤,並顯示在我的應用程序模板中定義的通用模態。我能夠通過爲Ember.onerror定義一個函數來處理錯誤,但一直未能找到一種方法來觸發某個事件或某個錯誤類型的應用程序的操作,例如TypeError。通過Ember.onerror處理typeError

下面是我是如何處理定義Ember.onerror

App.report_errors = (error) -> 
    console.log "error", error 
    # Would like to be able to use something like the below line 
    # to call an action on the application route 
    @send "showError" 

    # Log to api 

Em.onerror = App.report_errors 

下面是一個完整的例子說明擺弄我想完成什麼樣的樣本:http://jsfiddle.net/mandrakus/c8E3x/1/

謝謝!

回答

1

將此溶液(禮貌亞歷拼寫)將其在初始化期間與訪問路由器,因此路由器操作的能力注入的errorReporter對象。

App.initializer 
    name: 'errorReporter' 
    initialize: (container) -> 
    container.injection 'reporter:error', 'router', 'router:main' 
    container.injection 'route', 'errorReporter', 'reporter:error' 

    reporter = container.lookup 'reporter:error' 
    Em.onerror = (error) -> 
     reporter.report error 

App.ErrorReporter = Em.Object.extend 
    report: (error) -> 
     console.log "error", error 
     #Would like to be able to use something like the below line 
     #to call an action on the application route 
     @router.send "showError" 

App.ApplicationRoute = Ember.Route.extend 
    actions: 
    error: (error) -> @errorReporter.report error 
    showError: -> 
     console.log "displaying error" 
     #the final application generate a modal or other notification 
     alert "Generic Error Message" 
0

這個怎麼樣?

App.report_errors = function (error) { 
    App.__container__.lookup("route:application").send("showError", error); 
}; 

兩個潛在的問題:

  • 使用全局App對象。沒什麼大不了的,除非你試圖並行地主持兩個燼寶應用
  • 使用隱藏的容器屬性。這可能會改變將來的名稱/位置,但正如我所看到的那樣,我懷疑Ember團隊會將其完全移除。
+0

謝謝你的回答。我實際上已經看過這種方法,但是想看看是否有更通俗的方法來解決它。 –