有没有一种方法可以通过使用域数据库的getter和setter修改属性值?

时间:2018-06-27 02:51:24

标签: javascript node.js realm realm-mobile-platform

使用Realm节点上的领域数据库,当Realm构造一个人时,我需要修改/修剪诸如firstName之类的属性值。

但是,Realm文档上的quote引起了我的注意:

  

在这一点上,通过类定义模型的支持受到限制。它   在React Native中可用,但在Node中不可用。

我不确定我的问题是否在当前版本v2.8.0的情况下。

class Person {
  set firstName(firstName) {
    this._firstName = firstName.trim();
  }
}

Person.schema = {
  name: 'Person',
  properties: {
    firstName: 'string',
    lastName: 'string'
  }
};

// ---

realm.write(() => {
  const john = realm.create('Person', {
    firstName: ' John  ', // <-- need to be trimmed on model
    lastName: 'Smith'
  });
});

是否可以通过模型上的getter / setter方法修改属性值?或还有其他选择吗?

另一个考虑因素是Realm从模型构造对象,如果我使用setter甚至在构造函数上修改对象,这也会导致错误。

constructor() {
  this.firstName = this.firstName.trim();
}
  

无法在写事务之外修改托管对象。

2 个答案:

答案 0 :(得分:0)

std::sort

在通过realm.write(() => { const firstName = ' John '; const john = realm.create('Person', { firstName: firstName.trim(), // <-- need to be trimmed lastName: 'Smith' }); });方法将值分配给firstName之前,将其存储到另一个变量中并在分配时对其进行修整吗?

答案 1 :(得分:0)

基本上,打开一个包含自定义逻辑(例如特定配置和迁移的架构)的领域:

import Realm from './realm';

let persister = null;

class Person {

  constructor() {
    persister = Realm.open();
  }

  get firstName() {
    return this._firstName;
  }

  set firstName(firstName) {
    this._firstName = firstName.trim();
  }

  async save() {
    try {
      const realm = await persister;
      this.id = uuidv4();
      this.createdAt = Date();
      realm.write(() => {
        realm.create(this.constructor.name, this);
      });

      return this;
    } catch (e) {
      this.handleError(e);
    }
  }

  // ...
}

setters / getters处理诸如修整等属性值,并且异步方法将person对象保存在Realm数据库中,如下所示:

const person = new Person();
person.firstName = '      John   ';
person.lastName = 'Smith';

person.save().then((p) => {
  console.log(p.firstName); // persisted trimmed firstName
});

// OR within async function:
let p = await person.save();
console.log(p.firstName); // persisted trimmed firstName
相关问题