我有一个非常简单的聚合物元素,有点像这样:

<polymer-element name="pictures-list">
<template>
    <h2>
        <span id="pictitle">{{pictures.title}}</span>
    </h2>
    <input type="button" class="btn-hello" onclick="alert('hello');" value="Say Hello" />
    <paper-button class="btn-paper-hello" on-tap="{{tap}}" >flat button</paper-button>
</template>
<script>
    Polymer({
        tap: function() {
            console.log("tapped");
            this.$.pictitle.textContent = "Test"
        }
    });
</script>
</polymer-element>

以下是它的托管方式:

<body unresolved>
<div class="container">
    <pictures-list></pictures-list>
</div>
</body>

我想要实现的是以某种方式从外部提升click / tap事件(为了测试我的组件 . 由于ShadowDOM,你不能直接访问元素,但是你可以编写一个像这样的选择器,来到输入或纸质按钮元素:

$("body > .container /deep/ .btn-hello")

要么

$("body > .container /deep/ .btn-paper-hello")

现在,我可以在输入(html按钮)上执行click函数,并执行点击处理程序(显示警报),如下所示:

$("body > .container /deep/ .btn-hello").click();

我想基本上做同样的事情,但对于纸质按钮 . 如果我在纸张按钮上使用点击事件,但是没有点击,它会工作 . 所以这些不起作用:

$("body > .container /deep/ .btn-paper-hello").tap();

这个也不起作用:

$("body > .container /deep/ .btn-paper-hello").ontap();

我的问题是,我该怎么做?我可以执行fire函数,给它一个事件的名称,这会给我一个CustomeEvent对象,但是,它仍然没有被执行,例如:

$("body > .container /deep/ .btn-paper-hello").fire("on-tap")