【问题标题】:How to access the Ember Data Store from the console?如何从控制台访问 Ember 数据存储?
【发布时间】:2015-10-06 13:48:00
【问题描述】:

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

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

谢谢

【问题讨论】:

  • 你不能只使用 Ember Inspector 吗?
  • 嗯,它只适用于“正常”加载的实体。我有一个无法正确加载的模型(很多空字段),我怀疑是映射问题,但在控制台中没有可见的错误,所以我想手动触发商店加载。

标签: ember.js ember-data ember.js-2


【解决方案1】:

如果您查看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

【讨论】:

  • 完美。必须安装该软件包,因为它是一个迁移的旧 ember 应用程序。非常感谢!
【解决方案2】:

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-04-29
    • 1970-01-01
    • 1970-01-01
    • 2014-11-07
    • 1970-01-01
    • 2015-04-10
    • 1970-01-01
    • 2017-10-06
    相关资源
    最近更新 更多