使用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();
}
无法在写事务之外修改托管对象。
答案 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