Javascript 如何在Polymer中使用shadow DOM delegatesFocus选项?

Javascript 如何在Polymer中使用shadow DOM delegatesFocus选项?,javascript,polymer,focus,web-component,shadow-dom,Javascript,Polymer,Focus,Web Component,Shadow Dom,GoogleDevelopers关于ShadowDOM的入门介绍解释了当单击不可聚焦区域时,如何使用delegatesFocus来聚焦ShadowDOM中的第一个可聚焦元素 可以在附加卷影根并传递选项delegatesFocus:true时执行此操作 对于聚合物,我找不到通过该选项的方法。我甚至不能执行类似于this.shadowRoot.delegatesFocus=true的操作,因为它抛出一个异常,表示属性是只读的 下面是示例元素 /*阴影DOM样式在这里*/ :主持人{ 边框:2倍实

GoogleDevelopers关于ShadowDOM的入门介绍解释了当单击不可聚焦区域时,如何使用delegatesFocus来聚焦ShadowDOM中的第一个可聚焦元素

可以在附加卷影根并传递选项
delegatesFocus:true
时执行此操作

对于聚合物,我找不到通过该选项的方法。我甚至不能执行类似于this.shadowRoot.delegatesFocus=true的操作,因为它抛出一个异常,表示属性是只读的

下面是示例元素


/*阴影DOM样式在这里*/
:主持人{
边框:2倍实心;
填充:10px;
显示:块;
}
.内容{
字号:1em;
边框:1px实心;
填充:0.2em 0.6em;
}
点击这里!
类。元素{
静态get是(){
返回“pp输入”;
}
静态获取属性(){
返回{
价值:{
类型:字符串,
通知:正确,
reflectToAttribute:true,
值:true
}
}
}
输入(e){
this.value=e.target.value;
}
构造函数(){
超级();
此值为“”;
}
}
customElements.define(PPInput.is,PPInput);
Update-更干净的方法 如本链接所述,可以创建自己的影子DOM


出于朋友的礼貌,在GitHub上发现此问题

显然,
attachShadow()
选项没有通过Polymer公开,但是可以执行以下操作来覆盖Polymer创建阴影DOM的方式

class PPInput extends Polymer.Element {

    // code...

    _attachDom(dom) {
        if (!this.shadowRoot) {
            this.attachShadow({
                mode: 'open',
                delegatesFocus: true
            });
            this.shadowRoot.appendChild(dom);
        }
        return this.shadowRoot;
    }
}
这样做可以使元素按预期工作


/*阴影DOM样式在这里*/
:主持人{
边框:2倍实心;
填充:10px;
显示:块;
}
.内容{
字号:1em;
边框:1px实心;
填充:0.2em 0.6em;
}
点击这里!
类。元素{
静态get是(){
返回“pp输入”;
}
静态获取属性(){
返回{
价值:{
类型:字符串,
通知:正确,
reflectToAttribute:true,
值:true
}
};
}
输入(e){
控制台日志(e);
this.value=e.target.value;
}
_附件(dom){
如果(!this.shadowRoot){
这是阿塔奇沙多({
模式:“打开”,
代表团焦点:对
});
this.shadowRoot.appendChild(dom);
}
返回此.shadowRoot;
}
构造函数(){
超级();
此值为“”;
}
}
customElements.define(PPInput.is,PPInput);