WebComponent跟踪“此”

时间:2019-12-07 11:33:00

标签: javascript this web-component

我正在尝试为“ Conway的人生游戏”游戏创建一个Web组件(不要问我为什么,但是对于我们的大学,我们必须使用一个Web组件)

我经常遇到一个问题,我丢失了Web组件的“ this”。例如,当调用按钮事件的函数时,“ this”是按钮而不是Web组件。在下一步中,我无法在事件处理程序中调用Web组件的任何其他函数,因为“ this”是错误的,并且表示该函数不是函数。

我知道在JavaScript中,有一种方法可以通过编写“ that = this”来解决此问题,但这似乎不适用于Web组件,因为我不知道如何特别是在哪里定义此语句。我已经尝试过将它放到cunstructor中,但是当事件处理程序被调用时,我无法访问“ that”。

在这里您可以看到单元格单击的事件处理程序。一切正常,直到要调用“ this.UpdateGrid”函数,这是我的Web组件中的另一个函数。这里说函数不是函数,因为“ this”不正确。您对我该如何解决有任何想法?

cellClickHandler() {
        let rowCol = this.id.split("_");
        let row = rowCol[0];
        let col = rowCol[1];

        var classes = this.getAttribute("class");
        if (classes.indexOf("live") > -1) {
            this.setAttribute("class", "dead");
            this.updateGrid(row, col, 0);
        } else {
            this.setAttribute("class", "live");
            this.updateGrid(row, col, 1);
        }
    }

这是我绑定事件的方式:

createTable() {
        var table = document.createElement("table");

        for (var i = 0; i < this.$rows; i++) {
            var tr = document.createElement("tr");
            for (var j = 0; j < this.$cols; j++) {
                var cell = document.createElement("td");
                cell.setAttribute("id", i + "_" + j);
                cell.setAttribute("class", "dead");
                cell.onclick = this.cellClickHandler; //HERE IT IS
                tr.appendChild(cell);
            }
            table.appendChild(tr);
        }
        this.$shadow.appendChild(table);
    }

0 个答案:

没有答案