aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorTyler Schicke <tyler_schicke@brown.edu>2019-02-28 00:55:04 -0500
committerTyler Schicke <tyler_schicke@brown.edu>2019-02-28 00:55:04 -0500
commit9c9aea92d9a330f5826735c3c3e07ec35b325cc2 (patch)
treea673abebad861cbb29d7f5ed218d42778071e33d
parentc6ce284c0938587df5a0fa759587b33f8beaa68f (diff)
Added GetOrCreateAsync
-rw-r--r--src/fields/Document.ts19
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) {