javascript - 如何从模型类型中检索数据?

标签 javascript ember.js reverse-engineering

我完全是 Ember 的菜鸟,我必须从用 Ember 编写的外部网站检索数据。

我安装了 Ember 检查器插件,我看到了以下内容:

enter image description here

我可以在控制台调试窗口输入什么 javascript 命令来检索列表中的数据(Id 和 Number)?

我不能依赖 Ember inspector 进行数据检索,该工具仅用于检查结构。


更新1

感谢@kumkanillam,我在这里成功了:

enter image description here

我似乎可以知道列表中某个项目的每个属性的名称和类型,但我无法获取其值。

happy 数组是他的示例调用的结果:myStore.peekAll('common/following-info').toArray()

最佳答案

看看这个
https://guides.emberjs.com/v2.14.0/ember-inspector/container/ https://guides.emberjs.com/v2.14.0/ember-inspector/object-inspector/#toc_exposing-objects-to-the-console

图片解释的很好。

您可以通过单击检查器中的 $E 按钮将对象公开到控制台。这会将全局 $E 变量设置为所选对象。

您还可以向控制台公开属性。当您将鼠标悬停在对象的属性上时,每个属性旁边都会出现一个 $E 按钮。单击它以向控制台公开该属性的值。


更新1

您可以在控制台中运行以下代码。

 function getApplication() {
  let namespaces = Ember.Namespace.NAMESPACES;
  let application;

  namespaces.forEach(namespace => {        
    if (namespace instanceof window.Ember.Application) {
      application = namespace;
      return false;
    }
  });
  return application;
}

您可以使用上述函数获取应用程序实例,从那里您可以查找访问service:store,从那里您可以使用peekAll 所需的模型。为了单独查看所有需要的数据,我使用了 JSON 方法,如 stringify 然后解析。

我实际上使用了 LinkedIn 网站并使用他们的模型 common/following-info 进行演示。您可以选择要查看的模型,

var myApp = getApplication();
var myStore = myApp.__container__.lookup('service:store')
myStore.peekAll('common/following-info')
myStore.peekAll('common/following-info').toArray()
JSON.stringify(myStore.peekAll('common/following-info').toArray())
JSON.parse(JSON.stringify(myStore.peekAll('common/following-info').toArray()))

更新 2

myStore.peekAll('common/following-info') 这里它返回 DS.RecordArray它扩展了Ember.ArrayProxy ,这意味着您可以使用 ArrayProxy 中可用的方法。 forEach迭代或获取特定索引记录使用 objectAt(index)

在您的情况下,您需要知道模型的属性名称才能获取特定属性的值,例如

let allRecords = myStore.peekAll('common/following-info');
allRecords.forEach(function(item){
  console.log(item);
  console.log(' Using get method to value ', item.get('propName'));
});

获取特定的索引值,

let allRecords = myStore.peekAll('common/following-info');
let firstRecord = allRecords.objectAt(0);
console.log(' First record propName value is',firstRecord.get('propName'));

在你的情况下,你想打印整个对象而不给每个属性名称,那么没有内置的方法,我们需要使用 JSON.stringifyparse< 进行一些黑客攻击 以获得您正在寻找的完美对象。然后您可以使用 Object.values 获取所有值。

let arrayOfObjectWithOnlyKeysAndValuesOfModel = JSON.parse(JSON.stringify(myStore.peekAll('common/following-info').toArray()));
arrayOfObjectWithOnlyKeysAndValuesOfModel.forEach(function(item){ 
 console.log('item',item);
 console.log(' item values alone ', Object.values(item));
});

关于javascript - 如何从模型类型中检索数据?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45114038/

相关文章:

javascript - 按钮上的 Google Analytics 事件跟踪

javascript - 如何使用 javascript 和正则表达式替换双引号字符串中的双引号?

javascript - 防止 iPad 上的 Safari 窗口弹跳并允许选择 Scrubber

javascript - Javascript/NodeJs 中这个函数的等价物是什么?

ember.js - Ember 数据。保存模型与 "belongsTo"关系

jquery - 从 DOM 中插入/删除 Ember View 时的平滑动画

css - 在 ember powerselect 中自定义搜索框

reverse-engineering - 可执行部分标志

oracle - Hibernate逆向工程师(oracle)将NUMBER转换为零精度big_decimal

android - React-Native 安卓 | JScode 在 APK 中的位置