2014-09-24 57 views
1

當我嘗試從querySelector外部文件我得到了一個未定義的模板標籤中的元素,經過搜索,我發現的唯一解決方案的一點點是「shadowRoot」但是當我試圖使用它我得到'shadowRoot沒有定義'。找不到裏面有querySelector模板元素 - 聚合物

+0

你可以給'querySelectorAll'了一槍。 – 2014-09-24 11:52:13

+0

幾十個querySelectors中的哪一個不起作用? – 2014-09-24 12:20:23

+0

我能夠使'querySelector'工作,但不是所需的功能。確保你的'模板'也有一個激活的模型。 在一個側面說明 - 我真的不確定所有這些如何聯繫在一起。我沒有看到一個'polymer-element'聲明,所以你可能想創建一個codepen或者jsfiddle來測試這個,所以我們可以以更好的方式提供幫助 – 2014-09-24 13:34:29

回答

9

下面的代碼工作正常,我(jsbin):

<template is="auto-binding" id="tmpl"> 
    <h1>Hello from {{foo}}</h1> 
</template> 

<script> 
    document.addEventListener('polymer-ready', function() { 
    var tmpl = document.querySelector('#tmpl'); 
    tmpl.foo = 'my thing'; 
    }); 
</script> 

我加入了polymer-ready事件,因爲它通常是一個很好的做法試圖玩弄他們之前等待的元素都做好準備。

編輯:OP想知道如何找到一個模板

中的元素要找到一個模板中的元素,你會使用該模板的content關鍵字需要querySelector。這是爲了防止意外地在模板中選擇內容(例如,如果要在頁面上查詢選擇器全部p標記,則可能不希望p標記位於未被模板化的模板內)。

下面是這改變了templatejsbin)內的h2爲例

<template is="auto-binding" id="tmpl"> 
    <h1>Hello from {{foo}}</h1> 
    <h2>Another header</h2> 
</template> 

<script> 
    document.addEventListener('polymer-ready', function() { 
    var tmpl = document.querySelector('#tmpl'); 
    tmpl.foo = 'my thing'; 
    var h2 = tmpl.content.querySelector('h2'); 
    h2.textContent = 'hello world'; 
    }); 
</script> 
+0

我的不好,我忘了說它是找到模板標籤而不是元素模板內 – InvisibleUn1corn 2014-09-25 10:10:13

+0

好的,我已經更新了我的回答 – robdodson 2014-09-25 14:22:48

+1

感謝上帝,看了這個解決方案的網絡! – Whyser 2015-03-06 14:31:40