RealmJS - 显示代理对象而不是对象列表

时间:2017-02-12 14:08:13

标签: javascript react-native realm

我正在使用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控制台中,我获得了以下对象,而不是数据库中的所有汽车。

enter image description here

我在这里错过了什么吗?

4 个答案:

答案 0 :(得分:16)

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

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

背景

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

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

所有这一切的问题在于它在JavaScript调试器中不能很好地显示。不幸的是,我不知道如何影响Chrome在调试器中显示对象的方式。

来源:我是一个领域的贡献者。

答案 1 :(得分:1)

代码看起来很好,我在项目中也使用了类似的片段

Unexpanded

上图与上面显示的图像类似。

Expanded object

exanded版本应包含Car的所有对象。在我的情况下,属性在对象0下具有键和值。在您的情况下,它应该具有模型:"福特"在一个结果中。

答案 2 :(得分:0)

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

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

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

答案 3 :(得分:0)

我的建议,请循环播放

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