首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在父lit-element组件中挂钩数据网格事件?

如何在父lit-element组件中挂钩数据网格事件?
EN

Stack Overflow用户
提问于 2019-07-05 01:51:09
回答 1查看 1.2K关注 0票数 0

我想对放置在数据网格行中的元素所引发的事件做出反应。Vaading data-grid防止事件冒泡到包含网格的父组件。在网格列中为每一行呈现按钮时,我无法捕获来自托管网格的组件的单击或任何其他事件。

来自https://vaadin.com/components/vaadin-grid/html-examples的示例依赖于附加在html文件中的js挂钩。我正在使用Lit-element,并试图在firstUpdated()回调中做同样的事情。问题是,显然在这一点上,表是不可用的。

代码语言:javascript
复制
<vaadin-grid id="test" .items=${this.data} theme="compact">
    <vaadin-grid-column width="40px" flex-grow="0">
        <template class="header">#</template>
        <template>
            <vaadin-button style="font-size:10px;" theme="icon" focus-target @click="${(e) => { console.log(e) }}">
                <iron-icon icon="icons:create"></iron-icon>
            </vaadin-button>
        </template>
    </vaadin-grid-column>
</vaadin-grid>

我希望有日志,但没有发生任何事情,因为网格组件阻止事件冒泡到我的组件。

尝试为vaadin-grid-column实现渲染器属性的代码:

代码语言:javascript
复制
import { LitElement, html, css } from 'lit-element'
import {render} from 'lit-html';

import '@vaadin/vaadin-grid/vaadin-grid.js'
import '@vaadin/vaadin-grid/vaadin-grid-filter-column.js'
import '@vaadin/vaadin-grid/vaadin-grid-sort-column.js';
import '@vaadin/vaadin-grid/vaadin-grid-filter.js';
import '@vaadin/vaadin-grid/vaadin-grid-sorter.js'

export default class MyClass extends LitElement {
    static get properties () {
        return {
            data: { 
                type: Array,
                hasChanged: () => true
            },

        }
    }

    get grid() {
        return this.shadowRoot.querySelector('vaadin-grid');
    }

    constructor () {
        super()
        this.data = []//is being assigned from super as a property to a custom element 
    }
    render () {
        return html`
            <vaadin-grid id="test" .items=${this.data}>
                <vaadin-grid-column .renderer=${this.columnRenderer} header="some header text"></vaadin-grid-column>
            </vaadin-grid>
        `
    }

    columnRenderer(root, column, rowData) {
        render(html`test string`, root);
    }
}
window.customElements.define('my-elem', MyClass)
EN

回答 1

Stack Overflow用户

发布于 2019-07-08 15:38:29

在基于LitElement的组件中使用vaadin-grid时,应该使用renderers

下面是使用渲染器时代码的外观

代码语言:javascript
复制
import {LitElement, html} from 'lit-element';
// you need lit-html's render function
import {render} from 'lit-html';

class MyElement extends LitElement {
  // we'll just assume the data array is defined to keep the sample short
  render() {
    return html`
      <vaadin-grid id="test" .items=${this.data} theme="compact">
        <vaadin-grid-column width="40px" flex-grow="0" .renderer=${this.columnRenderer} .headerRenderer=${this.columnHeaderRenderer}></vaadin-grid-column>
      <vaadin-grid>
    `;
  }
  columnHeaderRenderer(root) {
    render(html`#`, root);
    // you could also just do this
    // root.textContent = '#'
    // or actually just use the column's header property would be easier tbh
  }
  columnRenderer(root, column, rowData) {
    render(
      html`
        <vaadin-button style="font-size: 10px;" theme="icon" focus-target @click="${(e) => { console.log(e) }}">
          <iron-icon icon="icons:create"></iron-icon>
        </vaadin-button>
      `, root);
  }
}

在这个由vaadin团队成员之一创建的Glitch中,您可以在LitElement中看到vaadin-grid的这些特性和更多特性

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/56892511

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档