Ho una quantità di proprietà che desidero osservare con lo stesso osservatore condiviso. Diciamo, voglio monitorare la cronologia delle modifiche. Purtroppo, il callback dell'osservatore polimero di serie, according to the documentation, ha un prototipo di ingenua:Polimero osservatore condiviso: acquisizione della proprietà di origine
myObserver: function(oldValue, newValue) {}
Dal momento che vorrei tenere traccia dei cambiamenti, ho bisogno di sapere il nome della proprietà modificata. Con la retroingegnerizzazione dello arguments
di myObserver
, ho scoperto sorprendentemente che esiste un terzo argomento di tipo Arguments[3]
passato alla funzione. Quindi il codice^W woodoo-magia di sotto farebbe il trucco:
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);
}
...
}
Essere sano di mente e desiderio di rimanere sani di mente, voglio sapere se mi mancava modo più amabile per ottenere il nome dell'attributo cambiato dall'osservatore.
@ebidel e @robdodson vuoi far luce su questo? arguments[2]
sarebbe supportato nelle versioni più recenti? C'è un modo migliore per reagire alle modifiche?
Grazie in anticipo.
Sì, grazie, so di 'MutationObserver'. Potrei persino usare il listener di eventi 'DOMSubtreeModified'. La domanda riguardava l'utilizzo del gestore di eventi già esistente, fornito da _Polymer_. – mudasobwa