【问题标题】:RealmJS - Displays proxy object instead of list of objectsRealmJS - 显示代理对象而不是对象列表
【发布时间】:2017-02-12 14:08:13
【问题描述】:

我将Realm JS 与我的React Native 应用程序一起使用。我在我的架构中插入了一个值,如下所示。

const CarSchema = {
  name: 'Car',
  properties: {
    model: 'string'
  }
};

let realm = new Realm({schema: [CarSchema]});
realm.write(() => {
  realm.create('Car', {
    model: 'Ford'
  });
});

let cars = realm.objects('Car');
console.log(cars);

在 Chrome 控制台中,我得到以下对象,而不是数据库中的所有汽车。

我错过了什么吗?

【问题讨论】:

  • 你能扩展那个代理并更新问题吗?想看看它包含什么?

标签: javascript react-native realm


【解决方案1】:

这是 Realm 对象(以及列表和结果)如何工作的结果 - Realm 不是从数据库中混合数据并反序列化(可能)大量对象,而是为您提供延迟加载的对象和集合。 Realm.objects('Car') 不返回 JavaScript 数组,而是返回 Results 对象 - 它的行为仍然与数组完全相同,但它不是使用内置数组对象实现的。这就是为什么它看起来不像 Chrome 控制台中的对象数组,尽管它的行为相同。

但是,您可以使用 Array.from(realm.objects('Car')) 急切地读取 Array 中的 Realm 集合,这样在调试器中的可视化效果会更好。

背景

“代理”对象是 Realm 及其零拷贝哲学的基石。所有 Realm SDK 都以相同的方式实现——而不是经过序列化和反序列化的普通对象,您可以获得直接访问数据库的代理对象。

在 realm-js 中,实际代理机制的工作方式会根据您的代码是在 React Native、Node.js 还是 React Native Chrome 调试器上运行而有所不同,因此这些代理的实现细节会有所不同。

这一切的问题在于它在 JavaScript 调试器中的显示效果不佳。不幸的是,我不知道如何影响 Chrome 在调试器中显示对象的方式。

来源:我是 Realm-js 贡献者。

【讨论】:

  • 如何更新汽车对象的值?我试过了,但是对象没有更新。
  • js const car = realm.objects('Car')[0]; realm.write(() => car.make = 'Honda'; 应该可以工作。但如果您在 Chrome 调试器中查看该对象,您可能需要重新评估它以获取其最新值。
【解决方案2】:

代码看起来不错,我在项目中也使用了类似的 sn-p

上图与您在上面显示的相似。

扩展版本应该包含 Car 的所有对象。在我的情况下,属性在对象 0 下具有键和值。在您的情况下,它应该有 model: "Ford" 的结果之一。

【讨论】:

    【解决方案3】:

    filtered 返回一个与 javascript 数组非常相似的 Results 对象。

    所以你的代码应该是:(如果你想在控制台中显示它)

    var items = realm.objects('Item').filtered('id == $0', item_id);
    var item = items[0];
    console.log(item.name); // should print the name
    

    【讨论】:

      【解决方案4】:

      我的建议,只是循环

         for (let i = 0; i < items.length; i++) {
             console.log('items[' + i + ']:', { ...items[i] })
          }
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2018-10-20
        • 2014-10-02
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-08-06
        • 1970-01-01
        相关资源
        最近更新 更多