2013-03-11 27 views
0

我在調用commit()之後做了些什麼以及要做什麼。我想確定如何路由用戶,具體取決於commit()是成功的還是服務器返回錯誤。如何在調用commit()之後路由

我讀的地方,如果在服務器上的錯誤,那麼就可以按以下返回> 400和錯誤狀態代碼:

{ 'errors' : [ { 'errorCode' : [ 'duplicate-user' ] } ] } 

在客戶端我有以下幾點:

App.UsersController = Ember.ObjectController.extend({ 

    createUser : function() { 
     'use strict'; 

     var user = App.User.createRecord({ 
       firstName : $("#firstName").val(), 
       lastName : $("#lastName").val(), 
       primaryEmailAddress : $("#primaryEmailAddress").val(), 
       password : $("#password").val() 
      }), 

      commitObserver = Ember.Object.extend({ 
       removeObservers : function (sender) { 
        sender.removeObserver('isError', this, 'error'); 
        sender.removeObserver('isValid', this, 'success'); 
       }, 
       error : function (sender, key, value) { 
        this.removeObservers(sender); 
        App.Router.router.transitionTo('duplicateuser'); 
       }, 
       success : function (sender, key, value) { 
        this.removeObservers(sender); 
        App.Router.router.transitionTo('usercreated'); 
       } 
      }); 

     user.get('transaction').commit(); 

     user.addObserver('isError', commitObserver.create(), 'error'); 
     user.addObserver('isValid', commitObserver.create(), 'success'); 
    } 
}); 

(注意我不是在我的HTML因此使用jQuery的使用 'Ember.TextField')我有幾個問題:

  1. 這是處理commit()的正確/最好的方法嗎?

  2. 我發現我必須刪除兩個觀察者,因爲isValidisError之後被調用 - 這是可以預料的嗎?

  3. 如何訪問服務器響應,因爲我希望能夠根據錯誤代碼進行路由決策?

  4. 我可以參考路由器的唯一方法是通過App.Router.router - 有更清晰的方法嗎?

  5. 如果出現錯誤,我是否需要做任何事情來從商店中刪除記錄,以便將來不會重新提交?

回答

1

從控制器內,你可以這樣做:

this.get('target').transitionTo('another.route') 

或者,您可以將事件從那裏發送到當前路由和轉換:

this.get('target').send('eventName'); 

,或者如果您需要通過型號:

this.get('target').send('eventName', this.get('content')); 
0

Si mply使用controller.transitionToRoute(「your.route」); 請參閱this link的源代碼...

相關問題