Loopbackjs Loopback.io中的属性设置器和获取器
我想知道使用model类中的setter和getter属性有多安全 这已经在环回用户模型中使用,可以在此处看到: 为什么在任何地方都没有记录?我们可以使用它吗?我仍然在寻找“官方”文档,但我们的主工程师在另一个SO答案中记录了它:Loopbackjs Loopback.io中的属性设置器和获取器,loopbackjs,setter,getter,strongloop,Loopbackjs,Setter,Getter,Strongloop,我想知道使用model类中的setter和getter属性有多安全 这已经在环回用户模型中使用,可以在此处看到: 为什么在任何地方都没有记录?我们可以使用它吗?我仍然在寻找“官方”文档,但我们的主工程师在另一个SO答案中记录了它: 如果我能在文档中找到官方支持,我会更新这个问题。事实上,经过更深入的挖掘,我发现这实际上是在环回数据源juggler模块的ModelBuilder类中使用和定义的。 它被定义为 ModelClass.setter={} 使用 所以它可能已经实现了,但没有文档记录…谢谢
如果我能在文档中找到官方支持,我会更新这个问题。事实上,经过更深入的挖掘,我发现这实际上是在环回数据源juggler模块的ModelBuilder类中使用和定义的。 它被定义为
ModelClass.setter={}代码>
使用
所以它可能已经实现了,但没有文档记录…谢谢您的回答!我已经看过了。我想知道是否有人能正式证实。。。无论如何,我会保留这个问题,直到它被完全证实。。
Object.defineProperty(ModelClass.prototype, propertyName, {
get: function() {
if (ModelClass.getter[propertyName]) {
return ModelClass.getter[propertyName].call(this); // Try getter first
} else {
return this.__data && this.__data[propertyName]; // Try __data
}
},
set: function(value) {
var DataType = ModelClass.definition.properties[propertyName].type;
if (Array.isArray(DataType) || DataType === Array) {
DataType = List;
} else if (DataType === Date) {
DataType = DateType;
} else if (DataType === Boolean) {
DataType = BooleanType;
} else if (typeof DataType === 'string') {
DataType = modelBuilder.resolveType(DataType);
}
var persistUndefinedAsNull = ModelClass.definition.settings.persistUndefinedAsNull;
if (value === undefined && persistUndefinedAsNull) {
value = null;
}
if (ModelClass.setter[propertyName]) {
ModelClass.setter[propertyName].call(this, value); // Try setter first
} else {
this.__data = this.__data || {};
if (value === null || value === undefined) {
this.__data[propertyName] = value;
} else {
if (DataType === List) {
this.__data[propertyName] = DataType(value, properties[propertyName].type, this.__data);
} else {
// Assume the type constructor handles Constructor() call
// If not, we should call new DataType(value).valueOf();
this.__data[propertyName] = (value instanceof DataType) ? value : DataType(value);
}
}
}
},
configurable: true,
enumerable: true,
});