2016-05-04 5 views
3

settergetterプロパティの使用がモデルクラスからどれくらい安全であるかを知りたいと思います。Loopback.ioのプロパティセッターとゲッター

これは、すでにループバック・ユーザー・モデルで使用されており、ここで見ることができます:User Code

は、このどこにも文書化されていないのはなぜ?それを使うことはできますか?

答えて

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, 
}); 

を使用...あなたの答えのための

関連する問題