Templates 如何访问同一个“目录”中的模板内容;事件“;当它在聚合物中可见时

Templates 如何访问同一个“目录”中的模板内容;事件“;当它在聚合物中可见时,templates,polymer,Templates,Polymer,让我试着把我的问题删掉 <polymer-element name="my-element"> <template> <template if="{{show}}"> <my-other-element id="elementWithUnexposedInternals"></my-other-element> </template> </temp

让我试着把我的问题删掉

<polymer-element name="my-element">
    <template>
        <template if="{{show}}">
            <my-other-element id="elementWithUnexposedInternals"></my-other-element>
        </template>
    </template>
    <script>
        Polymer({
            show: false,
            showChanged: function{
                this.$.elementWithUnexposedInternals.someProperty = true;
            }
        });
    </script>
</polymer-element>

聚合物({
秀:假,,
showChanged:功能{
此.$.ElementWithUnpositionInternals.someProperty=true;
}
});
我的另一个元素似乎无法在this.$行中访问,因为模板尚未呈现它

我怎样才能避开这个“订单”问题


干杯

您可以在“domReady”事件侦听器中设置“show”的值。

实际上,您有两个问题。一个是元素尚未呈现,另一个是元素将永远不会被添加到
中。$
,它只填充元素的静态内容:

您可以通过添加静态容器并使用querySelector来解决第二个问题:

<polymer-element name="my-element">
  <template>
    <div id="container>
      <template if="{{show}}">
        <my-other-element id="elementWithUnexposedInternals"></my-other-element>
      </template>
    </div>
  ...

var el = this.$.container.querySelector('#elementWithUnexposedInternals');
setTimeout(函数,0)
可能也会起作用——您所需要做的就是延迟事件循环中的一个周期。但是
async
在Polymer中更为惯用(另外,它使用绑定到自定义元素实例的
this
调用回调,这很方便)

此处的工作示例:

        showChanged: function(){
          this.async(function() {
            var myEl = 
      this.$.container.querySelector("#elementWithUnexposedInternals");
            myEl.someProp = true;
          });
        },