2014-04-12 11 views
7

Ora che Object.observe() è attivato per impostazione predefinita in Chrome, sto eseguendo un sacco di casi in cui voglio riutilizzare la proprietà incorporata del browser (hidden, title, draggable), ma gli osservatori *Changed non vengono più chiamati quando la proprietà cambia.Utilizzo degli osservatori delle modifiche per osservare le proprietà native in Object.observe()

Un esempio è hidden: http://jsbin.com/jizikaje/1/edit (hiddenChanged() non viene mai chiamato)

mia soluzione attuale è quella di utilizzare attributeChanged() per osservare l'attributo cambiando:

attributeChanged: function(attrName, oldVal, newVal) { 
    // Cannot use *Changed watchers for these native properties. 
    if (attrName == 'hidden') { 
    this.marker.setVisible(!this.hidden); 
    } 
} 

Qual è l'approccio consigliato?


BTW, lanciando un avvertimento quando si tenta di utilizzare le proprietà native andrà un lungo per il debug: https://github.com/Polymer/polymer/issues/379

+0

Sembra che "alert()" mi stia succedendo in Chrome 34. Forse è stato corretto? – jokeyrhyme

+0

Chrome 34 non ha Object.observe(). Usa il controllo sporco. – ebidel

+0

Ah si, questo ha senso. Il DOM non è stato ancora spostato in V8, quindi Object.observe() probabilmente non funziona sugli elementi DOM. – jokeyrhyme

risposta

0

Object.observe() è per le cose di JavaScript e MutationObserver è per elementi DOM. MutationObserver probabilmente funzionerebbe meglio in questo caso.

+2

Nota: per evitare problemi in futuro: I server Mutation vengono attivati ​​solo per le effettive mutazioni DOM-tree (cioè quelle che influenzano la struttura e gli attributi del DOM). Questo * non * ti consentirà di rilevare le modifiche alle proprietà native. A partire da ottobre 2014, non c'è modo di farlo in Chrome: dovresti essere in grado di ridurre i getter di proprietà native tramite Object.defineProperty(), ma ciò non funzionerà perché Object.getOwnPropertyDescriptor() è danneggiato per le proprietà native su Chrome e Safari. –

Problemi correlati