2016-05-04 114 views

回答

2

我仍然在尋找「官方」文檔,但我們的主工程師在另一個SO記錄了它的答案:https://stackoverflow.com/a/24253273/52160

如果我能在文檔中找到官方支持,我會更新問題。

+0

謝謝您的回答!我已經看到了這一點。我想知道是否有人可以正式驗證它...無論如何,我會保持開放的問題,直到它完全驗證.. – mitsos1os

1

實際上,隨着一些更深入的挖掘,我發現這實際上是在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, 
}); 

因此它可能實現,但沒有記錄......