I’m upgrading to Metronic 9.x (Tailwind CSS) and trying to initialize a KTSelect on my <select> element, but I get:
Uncaught TypeError: KTSelect.getOrCreateInstance is not a function
Example markup:
<select
id="districtSelect"
class="kt-select"
data-kt-select="true"
data-kt-select-placeholder="Seçiniz"
data-kt-select-multiple="true"
data-kt-select-config='{
"optionsClass": "kt-scrollable overflow-auto max-h-[250px]"
}'>
</select>
Initialization code:
const districtEl = document.querySelector("#districtSelect");
var districtSelect = KTSelect.getOrCreateInstance(districtEl, {
placeholder: 'Şehir seçiniz',
enableSearch: true,
searchPlaceholder: 'Ara...'
});
What I’ve tried:
core.bundle.js and confirmed that KTSelect is defined but does not expose getOrCreateInstance (unlike KTModal).new KTSelect(districtEl, …) works as expected.Questions:
KTSelect.getOrCreateInstance method?Any guidance on how to resolve this or best practice for managing KTSelect instances would be greatly appreciated.
Hi
KTSelect attaches its instance to the DOM element as element.instance.
Best practice:
element.instance exists and is a KTSelect instance.Example:
const districtEl = document.querySelector("#districtSelect");
let districtSelect = districtEl.instance;
if (!districtSelect) {
districtSelect = new KTSelect(districtEl, {
placeholder: 'Şehir seçiniz',
enableSearch: true,
searchPlaceholder: 'Ara...'
});
}
To avoids double-initialize and the error, You can create your helper:
function getOrCreateKTSelect(element, config) {
if (!element.instance) {
element.instance = new KTSelect(element, config);
}
return element.instance;
}