2014-04-12 8 views
7

Artık Chrome'da Object.observe() varsayılan olarak açık durumdadır, tarayıcının yerleşik özelliğini yeniden kullanmak istediğim bir grup vakayla karşılaşıyorum (hidden, title, draggable), ancak *Changed izleyiciler artık özellik değiştiğinde çağrılacaklar.Object.observe() altında yerel özellikleri gözlemlemek için değişiklik izleyicileri kullanma

bir örneği hidden geçerli: http://jsbin.com/jizikaje/1/edit (hiddenChanged() asla denir)

Benim şu anki geçici çözüm niteliği değişen gözlemlemek için attributeChanged() kullanmaktır:

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

önerilen yaklaşım nedir? https://github.com/Polymer/polymer/issues/379

+0

'Uyarı() 'Chrome 34'te benim için geçerli gibi görünüyor. Belki bu düzeltildi mi? – jokeyrhyme

+0

Chrome 34, Object.observe() ürününe sahip değil. Kirli kontrol kullanır. – ebidel

+0

Ah evet, bu mantıklı. DOM henüz V8'e taşınmamış, bu yüzden Object.observe() muhtemelen DOM öğelerinde çalışmaz. – jokeyrhyme

cevap

0

Object.observe() JavaScript şeyler içindir ve MutationObserver DOM öğeleri içindir:


BTW, hata ayıklama için uzun gidecek yerli özelliklerini kullanmaya çalışırken bir uyarı atma. MutationObserver muhtemelen bu durumda daha iyi çalışır.

+2

Gelecekte sorun kaydetmek için Not: MutationObservers yalnızca gerçek DOM-tree mutasyonları (yani DOM'ın yapısını ve niteliklerini etkileyenler) için tetiklenir. Bu, * yerel özelliklerdeki değişiklikleri yakalamanıza * izin vermez. Ekim 2014'ten itibaren bunu Chrome'da yapmanın bir yolu yok. Object.defineProperty() aracılığıyla yerel özellik alıcılarını kullanabilmeniz gerekir, ancak Chrome'da yerel özellikler için Object.getOwnPropertyDescriptor() öğesi bozuk olduğundan bu işe yaramaz. ve Safari. –