Added support for 'length' property to Knockout observable

This commit is contained in:
djmaze 2021-01-22 09:46:04 +01:00
parent d4f8712c1e
commit fa5476e486
3 changed files with 108 additions and 83 deletions

View file

@ -1,4 +1,5 @@
var observableLatestValue = Symbol('_latestValue');
const observableLatestValue = Symbol('_latestValue'),
length = 'length';
ko.observable = initialValue => {
function observable() {
@ -22,6 +23,17 @@ ko.observable = initialValue => {
observable[observableLatestValue] = initialValue;
Object.defineProperty(observable, length, {
get: () => length in observable[observableLatestValue] ? observable[observableLatestValue][length] : undefined,
set: function(value) {
if (length in observable[observableLatestValue]) {
this.valueWillMutate();
observable[observableLatestValue][length] = value;
this.valueHasMutated();
}
}
});
// Inherit from 'subscribable'
ko.subscribable['fn'].init(observable);
@ -35,7 +47,7 @@ ko.observable = initialValue => {
var observableFn = {
'toJSON': function() {
let value = this[observableLatestValue];
return value.toJSON ? value.toJSON() : value;
return value && value.toJSON ? value.toJSON() : value;
},
'equalityComparer': valuesArePrimitiveAndEqual,
peek: function() { return this[observableLatestValue]; },