2014-04-12 7 views
7

Nun, da Object.observe() standardmäßig in Chrome auf, ich bin in ein paar Fällen laufen, wo ich den Browser in Immobilien gebaut wiederverwendet werden soll (hidden, title, draggable), aber *Changed Beobachter werden nicht mehr aufgerufen, wenn sich die Eigenschaft ändert.Mit Änderung Beobachter beobachten nativen Eigenschaften unter Object.observe()

Ein Beispiel dafür ist hidden: http://jsbin.com/jizikaje/1/edit (hiddenChanged() heißt nie)

Meine aktuelle Problemumgehung ist attributeChanged() zu verwenden, das Attribut zu beobachten, zu ändern:

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

Was ist der empfohlene Ansatz?


BTW, werfen eine Warnung, wenn native Eigenschaften verwenden versuchen, wird eine lange für die Fehlersuche gehen: https://github.com/Polymer/polymer/issues/379

+0

Die 'alert()' scheint für mich in Chrome 34 passiert. Vielleicht wurde das behoben? – jokeyrhyme

+0

Chrome 34 verfügt nicht über Object.observe(). Es verwendet schmutzige Überprüfung. – ebidel

+0

Ah ja, das macht Sinn. Das DOM wurde noch nicht in V8 verschoben, daher funktioniert Object.observe() wahrscheinlich nicht mit DOM-Elementen. – jokeyrhyme

Antwort

0

Object.observe() für JavaScript Sachen ist, und MutationObserver ist für DOM-Elemente. MutationObserver würde in diesem Fall wahrscheinlich besser funktionieren.

+2

Hinweis, um Probleme in der Zukunft zu vermeiden: MutationObserver werden nur für tatsächliche DOM-Baum-Mutationen ausgelöst (d. H. Diejenigen, die die Struktur und die Attribute des DOM beeinflussen). Dies ermöglicht * nicht * das Abfangen von Änderungen an nativen Eigenschaften. Ab Oktober 2014 gibt es keine Möglichkeit, dies in Chrome zu tun - Sie sollten native Property-Getter über Object.defineProperty() shimmen können, aber das funktioniert nicht, da Object.getOwnPropertyDescriptor() für native Eigenschaften in Chrome gebrochen ist und Safari. –

Verwandte Themen