LWC'de DHTMLX Gantt
Aug 29 2020
Ben uygulamak ediyorum DHTMLX Gantt Grafiği LWC içinde. Gantt kitaplığı işlevinden bir LWC yöntemi çağırmaya çalışıyorum ama çalışmıyor.
İşte kod:
<template>
<input type="hidden" id="hidden-task-data" onclick={openModal}/>
<div class="thegantt" lwc:dom="manual" style='width:100%;'></div>
</template>
this.isModalOpen = false;
renderedCallback() {
Promise.all([
loadScript(this, DHTMLX7 + '/codebase/dhtmlxgantt.js'),
loadStyle(this, DHTMLX7 + '/codebase/dhtmlxgantt.css')
]).then(() => {
const root = this.template.querySelector('.thegantt');
root.style.height = "300px";
const gantt = window.Gantt.getGanttInstance();
//This method is called when a user double clicks on a task bar of the chart
gantt.attachEvent("onTaskDblClick", function(id, e) {
/* As per LWC's documentation, this doesn't work
let taskInput = document.getElementById("hidden-task-data");
taskInput.value = e;
taskInput.click();
*/
this.openModal(); //This doesn't work
return true;
});
});
}
openModal() {
this.isModalOpen = true;
console.log(this.isModalOpen);
}
openModalÇünkü yöntem çağrılmaz thisgantt kütüphanede geçerli bir referans değil. Ben de document.getElementByIdçalışmayan denedim . Bunu başarmanın yolları nelerdir?
Yanıtlar
4 AnmolKumar Aug 29 2020 at 00:42
Eğer kullanmaya çalıştığınızda thisbir de callback functionbağlam değişiklikleri ve sınıf örneğine Eğer gevşek referans, burada okuyun
Eski çözüm, this(Sınıf örneğine) bir başvuruyu ayrı bir değişkende ( selförnekte) depolamak ve onu geri aramada kullanmaktır.
Modern çözüm, kendi bağlamı olmayan ve sınıf bağlamına atıfta bulunan Arrow işlevini kullanmaktır.this
renderedCallback() {
Promise.all([
loadScript(this, DHTMLX7 + '/codebase/dhtmlxgantt.js'),
loadStyle(this, DHTMLX7 + '/codebase/dhtmlxgantt.css')
]).then(() => {
const gantt = window.Gantt.getGanttInstance();
// Using Arrow function
gantt.attachEvent("onTaskDblClick", (id, e) => {
this.openModal();
});
// Storing reference of this in another variable
const self = this;
gantt.attachEvent("onTaskDblClick", function(id, e) {
self.openModal();
});
});
}
Nicole Kidman, Michael Keaton ve Val Kilmer'in Batman Olarak Paylaştığı Bu 1 Çekici Özelliğe Bayıldı
Donovan, Şarkılarından 1'ini The Beatles'ın "Lucy in the Sky with Diamonds" şarkısıyla karşılaştırdı