2015-06-16 381 views
2

我看到直接綁定到兄弟元素不再支持 - https://www.polymer-project.org/1.0/docs/migration.html#binding-to-sibling-elements結合兄弟元素

1.0作品的屬性,但怎麼樣直接綁定到同級元素本身,例如建議的方法:

<template> 
    <x-publisher id="publisher"></x-publisher> 
    <x-subscriber publisher="{{$.publisher}}"></x-subscriber> 
</template> 

我在0.5中使用這個來訪問方法的同級元素以及屬性。有沒有辦法在1.0中做到這一點?一般來說這是不好的做法?

更新

基於瓦爾坦奧斯的評論我看了看鐵元&看來你可以做這樣的事情在x出版商的定義:在x

new Polymer.IronMeta({key: 'publisher', value: this}); 

然後用戶定義你可以這樣做:

this.publisher = (new Polymer.IronMeta()).byKey('publisher'); 

然而,你沒有得到綁定系統的好處這 - 例如你不能使用觀察者數組觀察發佈者對象的基於路徑的屬性更改。你可以直接設置一個對象觀察者,但是比直接綁定到兄弟姐妹的舊0.5方法開始變得更加混亂。

瞭解這只是性能折衷的一部分,但要確認沒有更好的方法!也很高興知道綁定到全元素通常是性能問題。

+0

這是不是你想這樣做(至少不是以這種方式)1.0。相反,請查看[iron-meta](https://elements.polymer-project.org/elements/iron-meta),這是1.0中共享DOM樹中信息/方法的首選方式。這與[iron-validator-behavior](https://elements.polymer-project.org/elements/iron-validator-behavior)使用的模式相同,它允許您在元素/應用程序中的某處實例化數據驗證器並使用其功能在別處通過指向它與各自的財產。 –

+0

另請注意,類似於鐵元方法,您可以向引用其'this'對象的x-publisher元素添加'self'屬性,然後使用'self'屬性執行綁定。不確定綁定到整個元素的性能影響。 – max

回答

2

你可以做這樣的事情:

<template> 
    <x-publisher id="publisher"></x-publisher> 
    <x-subscriber publisher="{{getElement('publisher')}}"></x-subscriber> 
</template> 
... 
getElement: function(name) { return this.$[name]; } 
+0

甜蜜,謝謝。但綁定似乎沒有設置正確。在x-subscriber中,{{publisher.property}}的任何用法都不會更改x-publishers屬性的更改,也不會有任何手動配置的觀察者。這是一個錯誤? – max

+0

你不能通過一個元素,並期望它的綁定在替代範圍內工作,這不是一個錯誤。 'x-subscriber'沒有辦法自動收聽'publisher'的更新事件。 –

+0

好的,當我想通了,謝謝。只需在0.5中進行雙重檢查,我們就不能在這裏使用聲明性綁定,即{{publisher.property}},但是我們可以爲傳入的元素屬性設置一個「觀察」對象。如果仍然可用,會很好,我發現它非常有用。然而猜測它可能需要像Object.observe這樣不再使用的東西? – max