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();
});
});
}
Gene Simmons, KISS Çizgi Romanlarının Potansiyel Olarak "İnsanlığı Yeniden Yaratabileceğini" Söyledi
Donovan, Şarkılarından 1'ini The Beatles'ın "Lucy in the Sky with Diamonds" şarkısıyla karşılaştırdı
Tom Girardi Dolandırıcılık Suçlamalarından Yargılanma Yetkisinin Belirlenmesi İçin Duruşmaya Katıldı
Kevin Jonas'ın Kızı Alena, Doğum Günü Fotoğrafında Büyümüş Görünüyor: '9 Yaşında Gerçek Hissetmiyor'