React Native中的域查询返回Realm对象而不是Class实例

时间:2016-07-19 21:35:13

标签: javascript react-native ecmascript-6 realm

我有这样的模型,能够将详细信息字段存储为JSON

class Person  {
  set details(data) { this._details = data ? JSON.stringify(data) : null; }
  get details() { return this._details ? JSON.parse(this._details) : null; }
}

Person.schema = {
  name: 'Person',
  primaryKey: 'id',
  properties: {
    id: 'string',
    name: 'string',
    _details: { type: 'string', optional: true }
  }
};

现在我做的时候

realm.write(() => {
  // this is a write block for some other objects,
  // but at some point I need to find a person
  let person = realm.objectForPrimaryKey('Person', id);
  console.log(person);
});

它将使用_details的getter和setter注销一个RealmObject实例,但details没有注释,所以它不是Person的实例,我在这里遗漏了什么吗?

我也试过class Person extends Realm.Object { ... }但没有改变。我读了documentation并假设它应该以这种方式工作,我希望它能做到这一点,否则我将不得不改变很多代码。

更新

暂时修复(黑客入侵)

let _person = realm.objectForPrimaryKey('Person', id);
if (_person) {
  let person = new Person();
  _.assign(person, _person);
}

有更好的建议吗?

1 个答案:

答案 0 :(得分:0)

您可以共享初始化Realm的代码吗?您需要传递对象构造函数而不是架构数组中的字符串才能恢复对象。所以如果你正在初始化你的领域

var realm = new Realm({schema: [Person]})

然后理论上一切都应该如你所愿。