Bugfix: revivePropertiesFromJson always set observables

This commit is contained in:
djmaze 2020-11-04 23:57:37 +01:00
parent 65030bf8d8
commit cc04e42444
2 changed files with 9 additions and 17 deletions

View file

@ -13,10 +13,10 @@ function typeCast(curValue, newValue) {
case 'string': return null != newValue ? '' + newValue : ''; case 'string': return null != newValue ? '' + newValue : '';
case 'object': case 'object':
if (curValue.constructor.reviveFromJson) { if (curValue.constructor.reviveFromJson) {
return curValue.constructor.reviveFromJson(newValue) || undefined; return curValue.constructor.reviveFromJson(newValue);
} }
if (!Array.isArray(curValue) || !Array.isArray(newValue)) if (Array.isArray(curValue) && !Array.isArray(newValue))
return undefined; return [];
} }
return newValue; return newValue;
} }
@ -95,12 +95,8 @@ export class AbstractModel {
{ {
case 'function': case 'function':
if (ko.isObservable(this[key])) { if (ko.isObservable(this[key])) {
value = typeCast(this[key](), value); this[key](typeCast(this[key](), value));
if (undefined !== value) { // console.log('Observable ' + (typeof this[key]()) + ' ' + (model.name) + '.' + key + ' revived');
this[key](value);
break;
}
// console.log((typeof this[key]())+' '+(model.name)+'.'+key+' not revived');
} }
// else console.log(model.name + '.' + key + ' is a function'); // else console.log(model.name + '.' + key + ' is a function');
break; break;
@ -108,11 +104,8 @@ export class AbstractModel {
case 'number': case 'number':
case 'object': case 'object':
case 'string': case 'string':
value = typeCast(this[key], value); this[key] = typeCast(this[key], value);
if (undefined !== value) { break;
this[key] = value;
break;
}
// fall through // fall through
case 'undefined': case 'undefined':
default: default:

View file

@ -20,8 +20,8 @@ export class AbstractCollectionModel extends Array
* @returns {*CollectionModel} * @returns {*CollectionModel}
*/ */
static reviveFromJson(json, itemCallback) { static reviveFromJson(json, itemCallback) {
const result = new this();
if (json) { if (json) {
const result = new this();
if ('Collection/'+this.name.replace('Model', '') === json['@Object']) { if ('Collection/'+this.name.replace('Model', '') === json['@Object']) {
Object.entries(json).forEach(([key, value]) => '@' !== key[0] && (result[key] = value)); Object.entries(json).forEach(([key, value]) => '@' !== key[0] && (result[key] = value));
// json[@Count] // json[@Count]
@ -32,10 +32,9 @@ export class AbstractCollectionModel extends Array
item && itemCallback && (item = itemCallback(item, result)); item && itemCallback && (item = itemCallback(item, result));
item && result.push(item); item && result.push(item);
}); });
return result;
} }
} }
return null; return result;
} }
} }