我想知道如何安全使用setter和getter model model中的屬性。Loopback.io中的屬性setter和getters
這已經在回送用戶模型中使用,可以在這裏看到:User Code
這是爲什麼不記錄任何地方?我們可以使用它嗎?
我想知道如何安全使用setter和getter model model中的屬性。Loopback.io中的屬性setter和getters
這已經在回送用戶模型中使用,可以在這裏看到:User Code
這是爲什麼不記錄任何地方?我們可以使用它嗎?
我仍然在尋找「官方」文檔,但我們的主工程師在另一個SO記錄了它的答案:https://stackoverflow.com/a/24253273/52160。
如果我能在文檔中找到官方支持,我會更新問題。
實際上,隨着一些更深入的挖掘,我發現這實際上是在Loopback-datasource-juggler模塊的ModelBuilder類中使用和定義的。 它被定義here
ModelClass.setter = {};
,並用於here
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,
});
因此它可能實現,但沒有記錄......
謝謝您的回答!我已經看到了這一點。我想知道是否有人可以正式驗證它...無論如何,我會保持開放的問題,直到它完全驗證.. – mitsos1os