Fix event handler removal on disconnect #540

Merged
jakubkottnauer merged 2 commits from fix-removeeventhandler-disconnect into main 2024-03-12 05:42:18 +08:00
5 changed files with 19 additions and 25 deletions

View File

@@ -3,21 +3,19 @@ import { Controller } from "@hotwired/stimulus"
// Connects to data-controller="account-collapse"
export default class extends Controller {
static values = { type: String }
boundOnToggle = null
initialToggle = false
STORAGE_NAME = "accountCollapseStates"
connect() {
this.boundOnToggle = this.onToggle.bind(this)
this.element.addEventListener("toggle", this.boundOnToggle)
this.element.addEventListener("toggle", this.onToggle)
this.updateFromLocalStorage()
}
disconnect() {
this.element.removeEventListener("toggle", this.boundOnToggle)
this.element.removeEventListener("toggle", this.onToggle)
}
onToggle() {
onToggle = () => {
if (this.initialToggle) {
this.initialToggle = false
return

View File

@@ -15,16 +15,14 @@ export default class extends Controller {
}
connect() {
this.inputElements.forEach(el => el.addEventListener('change', this.handler.bind(this)));
this.selectElements.forEach(el => el.addEventListener('change', this.handler.bind(this)));
[...this.inputElements, ...this.selectElements].forEach(el => el.addEventListener('change', this.handler));
}
disconnect() {
this.inputElements.forEach(el => el.removeEventListener('change', this.handler.bind(this)));
this.selectElements.forEach(el => el.removeEventListener('change', this.handler.bind(this)));
[...this.inputElements, ...this.selectElements].forEach(el => el.removeEventListener('change', this.handler));
}
handler(e) {
handler = (e) => {
console.log(e);
this.element.requestSubmit();
}

View File

@@ -8,14 +8,14 @@ export default class extends Controller {
connect() {
this.renderChart(this.seriesValue);
document.addEventListener("turbo:load", this.renderChart.bind(this));
document.addEventListener("turbo:load", this.renderChart);
}
disconnect() {
document.removeEventListener("turbo:load", this.renderChart.bind(this));
document.removeEventListener("turbo:load", this.renderChart);
}
renderChart() {
renderChart = () => {
this.drawChart(this.seriesValue);
}

View File

@@ -8,24 +8,22 @@ export default class extends Controller {
connect() {
this.updateClasses(this.defaultTabValue);
document.addEventListener(
"turbo:load",
this.updateClasses.bind(this, this.defaultTabValue)
);
document.addEventListener("turbo:load", this.onTurboLoad);
}
disconnect() {
document.removeEventListener(
"turbo:load",
this.updateClasses.bind(this, this.defaultTabValue)
);
document.removeEventListener("turbo:load", this.onTurboLoad);
}
select(event) {
this.updateClasses(event.target.dataset.id);
}
updateClasses(selectedId) {
onTurboLoad = () => {
this.updateClasses(this.defaultTabValue);
}
updateClasses = (selectedId) => {
this.btnTargets.forEach((btn) => btn.classList.remove(this.activeClass));
this.tabTargets.forEach((tab) => tab.classList.add("hidden"));

View File

@@ -7,14 +7,14 @@ export default class extends Controller {
connect() {
this.renderChart(this.seriesValue);
document.addEventListener("turbo:load", this.renderChart.bind(this));
document.addEventListener("turbo:load", this.renderChart);
}
disconnect() {
document.removeEventListener("turbo:load", this.renderChart.bind(this));
document.removeEventListener("turbo:load", this.renderChart);
}
renderChart() {
renderChart = () => {
this.drawChart(this.seriesValue);
}