Ich habe eine Knockout-Erweiterung, knockout-secure-binding, und wir haben an issue angetroffen.Knockout binding value.update nicht mit benutzerdefinierten Bindung aufgerufen und defineProperty
Insbesondere bei Object.defineProperty
Verwendung als knockout-es5 der Fall ist, die value
verbindlichen update
Funktion wird nicht aufgerufen, wenn ein Änderungsereignis auf einem input
ausgelöst wird.
Meine unit tests veranschaulichen die Besonderheit. Dies funktioniert:
it("reads an input `value` binding", function() {
var input = document.createElement("input"),
evt = new CustomEvent("change"),
context = { vobs: ko.observable() };
input.setAttribute("data-sbind", "value: vobs")
ko.applyBindings(context, input)
input.value = '273-9164'
input.dispatchEvent(evt)
assert.equal(context.vobs(), '273-9164')
})
Das (die wie Knockout-ES5 definiert Eigenschaften) funktioniert nicht:
it("reads an input `value` binding for a defineProperty", function() {
// see https://github.com/brianmhunt/knockout-secure-binding/issues/23
var input = document.createElement("input"),
evt = new CustomEvent("change"),
obs = ko.observable(),
context = { };
Object.defineProperty(context, 'pobs', {
configurable: true,
enumerable: true,
get: obs,
set: obs
});
input.setAttribute("data-sbind", "value: pobs")
ko.applyBindings(context, input)
input.value = '273-9164'
input.dispatchEvent(evt)
assert.equal(context.pobs, '273-9164')
})
Im letzteren Fall, wie erwähnt, value.update
nicht aufgerufen wird, wenn input.dispatchEvent
genannt wird.
Die benutzerdefinierte Bindung gibt valueAccessor
zurück, also erwarte ich, dass das Problem damit zusammenhängt. Es fällt mir gerade besonders auf, dass es mit einer Objekteigenschaft funktioniert, aber nicht defineProperty
.
Ehrfürchtig. [Sehr hilfreich] (https://github.com/brianmhunt/knockout-secure-binding/commit/6263979f9dc111ad847d8f2b83bcfa6fa6f2453f). Prost. –
Es ist erwähnenswert, dass Knockout nur '_TwoWayBindings' (d. H. Nicht' TwoWayBindings') darstellt. Siehe [KSB/Ausgaben Nr. 29] (https://github.com/brianmhunt/knockout-secure-binding/issues/29). Prost. –