如何从控制台访问 Ember 数据存储?

How to access the Ember Data Store from the console?

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

在 Ember 1 中通过 App.__container__.lookup 是可能的,但这已经不存在了,很难找到这方面的文档。

谢谢

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

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

你也可以像我一样为它创建一个instance initializer:

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.

如果您不想安装单独的包来在控制台中访问您的应用程序,您可以通过 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