9

在 Ember 2+ 中,有谁知道如何获取对 Ember 商店的引用,以便在 javascript 控制台中排除模型映射问题?

在 Ember 1中可以通过App.__container__.lookup,但这不再存在,而且很难找到关于此的文档。

谢谢

4

2 回答 2

18

如果你查看你的package.json,你应该会看到一个ember-export-application-global默认安装的包(如果没有,安装它)。这不会将您的应用程序导出到全局App对象,而是导出到以您的应用程序命名的全局对象。所以你可能有window.TodoListorwindow.ShoppingCart而不是window.App. 从那里你可以使用这一行(类似于 Ember 1.xx):

AppName.__container__.lookup('service:store')

你也可以像我一样为它创建一个实例初始化器:

export default {
    name: 'store-on-app',
    after: 'ember-data',
    initialize(instance) {
        const application = instance.container.lookup('application:main');
        const store = instance.container.lookup('service:store');
        application.set('store', store);
    }
}

然后你就可以使用AppName.store.

于 2015-10-06T14:04:46.210 回答
7

如果您不想安装单独的包来在控制台中访问您的应用程序,您可以通过window.Ember.Namespace.NAMESPACES. 例如,您可以在控制台中运行以查找您的应用程序实例:

var app = Ember.A(Ember.Namespace.NAMESPACES).filter(n => {return n.name === 'your-app-name'})[0];

从这里,您可以按照@GJK 的说明访问应用程序容器上的商店

var store = app.__container__.lookup('service:store');

我用它来调试生产中的 Ember 应用程序,该应用程序没有在window. 我通过查看ember-inspector源代码找到了它,因为它始终可以访问容器。

https://github.com/emberjs/ember-inspector/blob/2237dc1b4818e31a856f3348f35305b10f42f60a/ember_debug/vendor/startup-wrapper.js#L201

于 2019-10-30T22:04:11.583 回答