2014-09-24 38 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