Wie funktioniert die initObservable
Funktion von Magento 2 ?
Je detaillierter, desto besser, da ich der Meinung bin, dass nicht viele Leute die KO-Implementierung verstehen und dass die Kasse damit erstellt wird. Ich denke, wir sollten wirklich mehr darüber wissen. Die Entwicklerdokumente sind derzeit überhaupt nicht hilfreich, wenn es um KO geht, und da sie angepasst werden, hilft auch die KO-Website nicht weiter.
Alan Storm hat einige ausgezeichnete Artikel über M2 und KO geschrieben, aber selbst diese erklären nicht, wie es initObservable
funktioniert.
Der gesamte folgende Code befindet sich im Inneren
vendor/magento/module-ui/view/base/web/js/lib/core/element/element.js
Ich beschäftige mich mit der Knockout-Implementierung von Magento 2 und kann diese Code-Schleifen durch jedes an sie übergebene Element sammeln und auslösen track
.
initObservable: function () {
_.each(this.tracks, function (enabled, key) {
if (enabled) {
this.track(key);
}
}, this);
return this;
},
Die Spurfunktion ruft dann die Beobachtungsfunktion auf:
track: function (properties) {
this.observe(true, properties);
return this;
},
Die Beobachtungsfunktion funktioniert dann magisch. Hier verliere ich mich, da hier nichts als Referenz-Knockout erscheint.
observe: function (useAccessors, properties) {
var model = this,
trackMethod;
if (typeof useAccessors !== 'boolean') {
properties = useAccessors;
useAccessors = false;
}
trackMethod = useAccessors ? accessor : observable;
if (_.isString(properties)) {
properties = properties.split(' ');
}
if (Array.isArray(properties)) {
properties.forEach(function (key) {
trackMethod(model, key, model[key]);
});
} else if (typeof properties === 'object') {
_.each(properties, function (value, key) {
trackMethod(model, key, value);
});
}
return this;
},
initObversable
oderinitObverable
? OP verwendet später einen in seiner Frage.