diff options
author | Bob Zeleznik <zzzman@gmail.com> | 2019-02-28 09:20:06 -0500 |
---|---|---|
committer | Bob Zeleznik <zzzman@gmail.com> | 2019-02-28 09:20:06 -0500 |
commit | f3085f427ec7c324d0a21d710555e79e8a9704b5 (patch) | |
tree | c938fd15367ac5ec135347654baf8e3cd387309a /src | |
parent | 4a42946b5c8ec86e66a89fec2e66971a242e3dbb (diff) | |
parent | 9c9aea92d9a330f5826735c3c3e07ec35b325cc2 (diff) |
Merge branch 'master' into kvp
Diffstat (limited to 'src')
-rw-r--r-- | src/fields/Document.ts | 19 |
1 files changed, 19 insertions, 0 deletions
diff --git a/src/fields/Document.ts b/src/fields/Document.ts index 5b91de6ed..0c156b282 100644 --- a/src/fields/Document.ts +++ b/src/fields/Document.ts @@ -102,6 +102,25 @@ export class Document extends Field { return false; } + GetOrCreateAsync<T extends Field>(key: Key, ctor: { new(): T }, callback: (field: T) => void): void { + //This currently doesn't deal with prototypes + if (this._proxies.has(key.Id)) { + Server.GetDocumentField(this, key, (field) => { + if (field && field instanceof ctor) { + callback(field); + } else { + let newField = new ctor(); + this.Set(key, newField); + callback(newField); + } + }); + } else { + let newField = new ctor(); + this.Set(key, newField); + callback(newField); + } + } + GetT<T extends Field = Field>(key: Key, ctor: { new(...args: any[]): T }, ignoreProto: boolean = false): FieldValue<T> { var getfield = this.Get(key, ignoreProto); if (getfield != FieldWaiting) { |