使用querySelector查找Polymer模板内的嵌套元素将返回null

Alb*_*nos 20 javascript shadow-dom polymer

我正在尝试在新元素(tabs-list)中使用paper-tabs但是在打印选项卡之后我不能使用querySelector来更改所选的.

元素代码(没有样式):

<link rel="import" href="../components/polymer/polymer.html">
<link rel="import" href="../sprint-service/sprint-service.html">
<link rel="import" href="../components/paper-tabs/paper-tabs.html">

<polymer-element name="tab-list" attributes="show">
  <template>
    <sprint-service id="service" sprints="{{sprints}}"></sprint-service>   
    <paper-tabs selected="all" valueattr="name" self-end>
      <paper-tab name="all">ALL</paper-tab>
      <template repeat="{{sprint in sprints}}">
        <paper-tab name="{{sprint.id}}">{{sprint.id}}</paper-tab>
      </template>
    </paper-tabs>
  </template>
  <script>
    Polymer('tab-list', {
      ready: function() {
        var tabs = document.querySelector('paper-tabs');
        tabs.addEventListener('core-select', function() {
          list.show = tabs.selected;
        }) 
      } 
    });
  </script>
</polymer-element>
Run Code Online (Sandbox Code Playgroud)

Index.html代码(whitout样式):

<!doctype html>
<html>

<head>
  <title>unquote</title>
  <meta name="viewport" content="width=device-width, minimum-scale=1.0, initial-scale=1.0, user-scalable=yes">
  <script src="../components/platform-dev/platform.js"></script>
  <link rel="import" href="../components/font-roboto/roboto.html">
  <link rel="import"
    href="../components/core-header-panel/core-header-panel.html">
  <link rel="import"
    href="../components/core-toolbar/core-toolbar.html">
  <link rel="import" href="tab-list.html">
  <link rel="import" href="post-list.html">
</head>

<body unresolved touch-action="auto">
  <core-header-panel>
    <core-toolbar>
      <tab-list></tab-list>
    </core-toolbar>
    <div class="container" layout vertical center>
      <post-list show="all"></post-list>
    </div>
  </core-header-panel>

  <script>

  var list = document.querySelector('post-list');

  </script>
</body>

</html>
Run Code Online (Sandbox Code Playgroud)

querySelector('paper-tabs') = *null*
Run Code Online (Sandbox Code Playgroud)

我试图把它eventListener放在index.html但我有同样的问题.谁能告诉我问题在哪里?

非常感谢你!

Dir*_*orf 39

document.querySelector('paper-tabs');
Run Code Online (Sandbox Code Playgroud)

找不到paper-tabs元素,因为它隐藏在tab-list元素的shadow DOM中.

你可以简单地给纸质标签提供一个id,比如标签,然后像这样访问它

this.$.tabs
Run Code Online (Sandbox Code Playgroud)

(参见http://www.polymer-project.org/docs/polymer/polymer.html#automatic-node-finding.)

还可以选择直接访问shadow DOM

this.shadowRoot.querySelector('paper-tabs');
Run Code Online (Sandbox Code Playgroud)

如果您只想在纸张选项卡选项上监听更改,则可以使用更改监视器:

<paper-tabs selected="{{currentTab}}">

Polymer('tab-list', {
  currentTab: 'all',
  currentTabChanged: function() {
    console.log(this.currentTab);
  }
});
Run Code Online (Sandbox Code Playgroud)

(见http://www.polymer-project.org/docs/polymer/polymer.html#change-watchers)