notifySubscribers and equalityComparer are not used outside KnockoutJS

This commit is contained in:
djmaze 2021-12-31 17:10:40 +01:00
parent 679d7356e0
commit 30e9b89d9b
9 changed files with 113 additions and 114 deletions

View file

@ -94,7 +94,7 @@
// the context object.
if (subscribable.isActive()) {
// Always notify because even if the model ($data) hasn't changed, other context properties might have changed
subscribable['equalityComparer'] = null;
subscribable.equalityComparer = null;
} else {
self[contextSubscribable] = undefined;
}
@ -203,7 +203,7 @@
if (bindingInfo) {
bindingInfo.notifiedEvents[event] = true;
if (bindingInfo.eventSubscribable) {
bindingInfo.eventSubscribable['notifySubscribers'](node, event);
bindingInfo.eventSubscribable.notifySubscribers(node, event);
}
if (event == ko.bindingEvent.childrenComplete) {
if (bindingInfo.asyncContext) {

View file

@ -31,9 +31,9 @@
if (completedAsync) {
// Note that notifySubscribers ignores any dependencies read within the callback.
// See comment in loaderRegistryBehaviors.js for reasoning
subscribable['notifySubscribers'](definition);
subscribable.notifySubscribers(definition);
} else {
ko.tasks.schedule(() => subscribable['notifySubscribers'](definition));
ko.tasks.schedule(() => subscribable.notifySubscribers(definition));
}
});
completedAsync = true;

View file

@ -149,7 +149,7 @@ function evaluateImmediate_CallReadThenEndDependencyDetection(state, dependencyD
}
var computedFn = {
"equalityComparer": valuesArePrimitiveAndEqual,
equalityComparer: valuesArePrimitiveAndEqual,
getDependenciesCount: function () {
return this[computedState].dependenciesCount;
},
@ -303,17 +303,17 @@ var computedFn = {
if (changed) {
if (!state.isSleeping) {
computedObservable["notifySubscribers"](state.latestValue, "beforeChange");
computedObservable.notifySubscribers(state.latestValue, "beforeChange");
} else {
computedObservable.updateVersion();
}
state.latestValue = newValue;
computedObservable["notifySubscribers"](state.latestValue, "spectate");
computedObservable.notifySubscribers(state.latestValue, "spectate");
if (!state.isSleeping && notifyChange) {
computedObservable["notifySubscribers"](state.latestValue);
computedObservable.notifySubscribers(state.latestValue);
}
if (computedObservable._recordUpdate) {
computedObservable._recordUpdate();
@ -321,7 +321,7 @@ var computedFn = {
}
if (isInitial) {
computedObservable["notifySubscribers"](state.latestValue, "awake");
computedObservable.notifySubscribers(state.latestValue, "awake");
}
return changed;
@ -420,7 +420,7 @@ var pureComputedOverrides = {
}
if (!state.isDisposed) { // test since evaluating could trigger disposal
computedObservable["notifySubscribers"](state.latestValue, "awake");
computedObservable.notifySubscribers(state.latestValue, "awake");
}
}
},
@ -438,7 +438,7 @@ var pureComputedOverrides = {
}
});
state.isSleeping = true;
this["notifySubscribers"](undefined, "asleep");
this.notifySubscribers(undefined, "asleep");
}
},
getVersion: function () {

View file

@ -16,7 +16,7 @@ ko.extenders = {
},
'notify': (target, notifyWhen) => {
target["equalityComparer"] = notifyWhen == "always" ?
target.equalityComparer = notifyWhen == "always" ?
null : // null equalityComparer means to always notify
valuesArePrimitiveAndEqual;
}

View file

@ -42,13 +42,13 @@ var observableFn = {
let value = this[observableLatestValue];
return value && value.toJSON ? value.toJSON() : value;
},
'equalityComparer': valuesArePrimitiveAndEqual,
equalityComparer: valuesArePrimitiveAndEqual,
peek: function() { return this[observableLatestValue]; },
valueHasMutated: function () {
this['notifySubscribers'](this[observableLatestValue], 'spectate');
this['notifySubscribers'](this[observableLatestValue]);
this.notifySubscribers(this[observableLatestValue], 'spectate');
this.notifySubscribers(this[observableLatestValue]);
},
valueWillMutate: function () { this['notifySubscribers'](this[observableLatestValue], 'beforeChange'); }
valueWillMutate: function () { this.notifySubscribers(this[observableLatestValue], 'beforeChange'); }
};
// Note that for browsers that don't support proto assignment, the

View file

@ -82,7 +82,7 @@ ko.extenders['trackArrayChanges'] = (target, options) => {
pendingChanges = 0;
if (changes && changes.length) {
target['notifySubscribers'](changes, arrayChangeEventName);
target.notifySubscribers(changes, arrayChangeEventName);
}
}
}

View file

@ -67,7 +67,7 @@ var ko_subscribable_fn = {
return subscription;
},
"notifySubscribers": function (valueToNotify, event) {
notifySubscribers: function (valueToNotify, event) {
event = event || defaultEvent;
if (event === defaultEvent) {
this.updateVersion();
@ -105,9 +105,9 @@ var ko_subscribable_fn = {
beforeChange = 'beforeChange';
if (!self._origNotifySubscribers) {
self._origNotifySubscribers = self["notifySubscribers"];
self._origNotifySubscribers = self.notifySubscribers;
// Moved out of "limit" to avoid the extra closure
self["notifySubscribers"] = function(value, event) {
self.notifySubscribers = function(value, event) {
if (!event || event === defaultEvent) {
this._limitChange(value);
} else if (event === 'beforeChange') {
@ -165,7 +165,7 @@ var ko_subscribable_fn = {
},
isDifferent: function(oldValue, newValue) {
return !this['equalityComparer'] || !this['equalityComparer'](oldValue, newValue);
return !this.equalityComparer || !this.equalityComparer(oldValue, newValue);
},
toString: () => '[object Object]',
@ -197,4 +197,4 @@ ko.subscribable['fn'] = ko_subscribable_fn;
ko.isSubscribable = instance =>
instance != null && typeof instance.subscribe == "function" && typeof instance["notifySubscribers"] == "function";
instance != null && typeof instance.subscribe == "function" && typeof instance.notifySubscribers == "function";