2016-09-17 151 views
1

我有一個非常簡單的結構基本聚合物模板,這裏描述: Polymer: can't get this.__data__ passing in from host(codebase是在這裏:https://srgg6701.github.io/Polymer_template) 我需要使用從父項傳遞給兒童的數據。我可以通過他們,看看它內部this.domHost如何獲得聚合物domHost屬性?

enter image description here

但是,如果我試圖讓this.domHost.properties,它說:undefined(!)。

enter image description here

於是,兩個問題:

  1. 爲什麼它是不確定的嗎?
  2. 是否可以訪問此數據?
+0

我更新了我的答案,以更詳細地回答您的兩個問題。 – adaliszk

回答

1

對於問題1:這是ready事件之前的元素的最有可能的副本,這就是爲什麼它是不確定的。大多數情況下,您應該使用Polymer DOM API在DOM中進行操作。主機對象應提供:Polymer.dom(this).getOwnerRoot().host

對於問題2:使用Polymer Data Binding這樣的工作你想要達到什麼目的。您仍然可以在父元素中使用this.policies,但數據活頁夾會將信息提供給子元素,並且所有內容都將進行同步和處理。

對於數據綁定,屬性添加到您的x-comphostx-child元素:

properties: { 
    data: { 
     type: Object, 
     value: null, // Default Value 

     // Fire value-changed Event when changed 
     // so the elements and the data binding 
     // will react to that. 
     notify: true 

     // (optional) Listener for the property changing 
     // if your want to make custom logic 
     observer: '_doSomething' 
    } 
} 

而且在themplate添加的屬性是這樣的:<x-child data="{{data}}"></x-child>

隨着越來越多的元素,你可以做一個Behavior其能包含財產和觀察員的詳細信息,你不需要複製粘貼到每個元素,但你可以覆蓋,如果你想:

var MyDataBehavior = { 
    properties: { 
     data: {type:Object, notify:true, observer: '_dataChanged'} 
    }, 
    dataChanged: function(data) { /* ... */ } 
}; 

當你添加的行爲輸入,則只需將其添加到您的元素定義:

//... 
behaviors: [MyDataBehavior], 
//... 

影子DOM類似於一個封閉的城堡,你不能進入或從內離開,你必須建立橋樑,讓人民並出去。

莫妮卡·丁庫勒斯庫(從谷歌聚合物隊):

使橋代小龍進入暗影DOM城堡!

Ultimatley您可以將您的數據到全球範圍,可以達到它,因爲窗口對象是共享的,而不是某種原始的一個副本。