1

下载 Polymer Starter Kit 后,我​​在 index.html 中的 dom-bind 模板内(嵌套)了一个 dom-if 模板,以在用户未通过身份验证时隐藏整个 UI。但是,我无法使用 app.$$('#id') 功能获取 dom-if 元素。

我正在尝试访问 app.closeDrawer 函数(app.js)中的 paperDrawerPanel

app.closeDrawer = function () {
    console.log(app.$$('#paperDrawerPanel')); //returns null
};

如何访问该元素?

编辑 1

这是html部分:

...
<body unresolved>
    <span id="browser-sync-binding"></span>
    <template is="dom-bind" id="app">

        <auth-login id="auth" user="{{user}}" is-authenticated="{{isAuthenticated}}"" location="https://i2bserver.firebaseio.com"></auth-login>

        <template is="dom-if" if="{{isAuthenticated}}">
            <paper-drawer-panel id="paperDrawerPanel" drawer-width="220px" responsive-width="1100px">
...

编辑 2

我猜在路由.html 调用 app.closeDrawer 的那一刻,dom-if 元素应该已经被夯实了。

这是调用 app.closeDrawer 的代码(来自 PSK 的 routing.html):

function closeDrawer(ctx, next) {
  app.closeDrawer();
  next();
}

// Routes
page('*', scrollToTop, closeDrawer, function(ctx, next) {
  next();
});
4

2 回答 2

1

从文档:

要在元素的本地 DOM 中定位动态创建的节点,请使用 $$ 方法:

this.$$(selector)

$$返回本地 DOM 中匹配的第一个节点selector

这意味着您必须添加一个#符号以使用其引用元素id。你的代码

app.closeDrawer = function () {
  console.log(app.$$('paperDrawerPanel')); //returns null
};

如果这样写应该可以工作

app.closeDrawer = function () {
  console.log(app.$$('#paperDrawerPanel'));
};
于 2016-02-14T05:52:18.760 回答
1

element.$$的 DOM 范围内的查询element。在您的情况下,app是一个模板,其工作是将 DOM 标记到封闭范围 ( body) 中。

试试document.querySelector('#paperDrawerPanel')

于 2016-02-14T10:27:20.353 回答