2013-07-26 64 views
1

我試圖通過我的REST API獲取當前登錄的用戶,然後將其設置爲ApplicationController的屬性。這是我正在努力做到這一點:Ember.js在加載時設置應用程序屬性

App.ApplicationController = Ember.Controller.extend({ 
    init: function() { 
     this._super(); 
     var self = this; 
     App.User.findCurrent().then(function(user) { 
      self.set('currentUser', user); 
     }); 
    } 
}); 

App.User = Ember.Object.extend({}); 

App.User.reopenClass({ 
    findCurrent: function() { 
     return $.getJSON('/api/v1/users/current').then(
      function(response) { 
       return response.user; 
      } 
     ); 
    } 
}); 

當我訪問Chrome網絡選項卡上,我看到有一個調用API,並返回JSON,但是當我試圖訪問例如{{currentUser.name}}在我的應用程序模板(或其中的一部分)中,它不返回名稱。也沒有給出錯誤。

但在應用程序模板中,它不會返回它。

我錯過了什麼?

謝謝!

編輯

當我創建另一個控制器,例如HelpController並參觀/help,然後{{currentUser.name}}不返回用戶名:

App.HelpController = Ember.Controller.extend({ 
    needs: ['application'], 
    currentUser: Ember.computed.alias('controllers.application.currentUser') 
}); 

編輯2

對不起,我忘了提,我其實想使用{{currentUser.name}}從部分({{partial 'sidebar'}}),但這不應該改變任何東西,因爲這是相同的範圍,對吧?

編輯3

我發現很奇怪的東西。當我在我的應用程序模板(這不是我想要的btw)中調用{{currentUser.name}}時,它也可以在{{partial 'sidebar'}}中使用。

編輯4

根據要求:

DEBUG: Ember.VERSION : 1.0.0-rc.6 ember.js?body=1:361 
DEBUG: Handlebars.VERSION : 1.0.0-rc.4 ember.js?body=1:361 
DEBUG: jQuery.VERSION : 1.10.0 
+0

我創建了一個jsbin並運行,請看看http://jsbin.com/ucanam/487/edit。 –

+0

這很奇怪。這確實和我一樣! – EsTeGe

+0

沒錯。你可以在你的問題中添加handlebar,ember和jquery的版本嗎?這是在瀏覽器控制檯中記錄的。當應用程序啓動。 –

回答

1

這並不是把這個邏輯正確的位置。您可以使用ApplicationRoute上的路線掛鉤modelafterModel輕鬆完成此操作。一般來說,在路由鉤子中完成數據的加載。這允許路由器在加載時暫停,因爲控制器和模板發揮作用時,它們正在處理已加載的數據。

App.ApplicationRoute = function() { 
    model: function() { 
    return App.User.findCurrent(); 
    }, 
    afterModel: function(model) { 
    App.set('currentUser', model) 
    } 
} 
+0

我試過這種方法,但它似乎沒有工作。檢查JSBin:http://jsbin.com/ewasoq/1/edit – EsTeGe

+0

您面臨的問題是您在模板中使用了「{{currentUser.name}}」。您需要將其稱爲「{{model.name}}」或「{{App.currentUser.name}}」或者創建一個「currentUser」計算屬性。 –

+0

正是!它現在有效。非常感謝!我仍然有很多要了解Ember。我想我會再次閱讀指南/文檔。 – EsTeGe

相關問題