2013-10-16 32 views
5

由于Ember.Data 1.0 Beta,我们必须使用store.find('model'),而不是App.Model.find()。如何访问App对象内的存储对象?Ember.js:如何从应用程序对象访问存储

var App = Ember.Application.create({ 
    auth: function() { 
    return new Ember.RSVP.Promise(function(resolve, reject) { 
     // ... get token somehow ... 
     // how to get store? 
     this.store.find('user').then(function(users) { 
     App.set('user', users.get('firstObject'); 
     resolve(); 
     }, function(err) { 
     reject(); 
     }); 
    }); 
    } 
}); 

App.deferReadiness(); 
App.auth().then(App.advanceReadiness()); 

回答

6

您可以创建一个将存储注入应用程序对象的初始化程序。

App.initializer({ 
    name: 'Inject Store', 
    initialize: function(container, application) { 
     container.injection('application:main', 'store', 'store:main'); 
    } 
}); 

之后,您可以在应用程序中使用this.get('store')。当然,您可以通过简单地将商店(通过container.lookUp检索)设置在应用程序对象上来避开容器,但这会破坏容器的用途。

5

我已经使用这个获得我的主应用程序对象的商店。这不太好,但它完成了工作。

var store = App.__container__.lookup('store:main') 
+0

应用程序容器不打算公开使用。来自Yehuda Katz的关于这个问题的[这篇文章](https://github.com/emberjs/ember.js/commit/5becdc4467573f80a5c5dbb51d97c6b9239714a8)。您应该根据以前的答案注入商店。 – blimmer

相关问题