Ich habe eine Anzahl von Eigenschaften, die ich mit demselben geteilten Beobachter beobachten möchte. Lassen Sie uns sagen, ich möchte Änderungshistorie verfolgen. Leider hat der Standardpolymer Beobachter Rückruf, according to the documentation, ein kunstlos Prototyp:Gemeinsamer Polymer-Beobachter: Erhalten der Ursprungseigenschaft
myObserver: function(oldValue, newValue) {}
Da möchte ich auf Änderungen den Überblick behalten, muss ich den Namen der Eigenschaft geändert wissen. Durch Reverse-Engineering der arguments
von myObserver
, entdeckte ich überraschend, dass es ein drittes Argument vom Typ Arguments[3]
an die Funktion übergeben wird. So ist die Code^W woodoo-Magie unten würde den Trick:
myObserver: function() {
if (arguments.length > 2) { // observer called by polymer
var args = arguments[2];
var idx = args[1].length - 1; // sic! index of changed is stored in index
var prop = args[2][idx * 2 + 1][0];
var val = args[0][idx];
console.log("Property [" + prop + "] got new value: " + val);
}
...
}
Sein gesund und Verlangen zu bleiben gesund, ich mag wissen, ob ich liebenswürdige Weise verpassten die geänderte Attributnamen von dem Beobachter zu bekommen.
@ebidel und @robdodson würden Sie bitte etwas Licht darauf werfen? Wird die arguments[2]
in den neuesten Versionen unterstützt? Gibt es eine bessere Möglichkeit, auf Veränderungen zu reagieren?
Vielen Dank im Voraus.
Ja, danke, weiß ich über 'MutationObserver'. Ich könnte sogar 'DOMSubtreeModified' Event Listener verwenden. Die Frage bezog sich auf die Verwendung bereits vorhandener Event-Handler, die von _Polymer_ bereitgestellt wurden. – mudasobwa