আপনার মন্তব্যের উপর ভিত্তি করে, আপনার সম্ভবত সম্পদ লোডিং সহ প্রতিটি এইচটিএমলেমেন্ট যা করে তা করা উচিত: ফলাফলটির উপর নির্ভর করে কোনও লোড বা ত্রুটি ইভেন্ট উত্পন্ন করে কনস্ট্রাক্টর একটি পার্শ্বস্থায়ী ক্রিয়া শুরু করুন।
হ্যাঁ, এর অর্থ প্রতিশ্রুতি ব্যবহার করা, তবে এর অর্থ "জিনিসগুলি প্রতিটি অন্যান্য এইচটিএমএল উপাদানগুলির মতো একইভাবে করা", যাতে আপনি ভাল সঙ্গী হন। এই ক্ষেত্রে:
var img = new Image();
img.onload = function(evt) { ... }
img.addEventListener("load", evt => ... );
img.onerror = function(evt) { ... }
img.addEventListener("error", evt => ... );
img.src = "some url";
এটি উত্স সম্পত্তির একটি অ্যাসিনক্রোনাস লোডটিকে সরিয়ে দেয় যা সফল হয়, শেষ হয় onload
এবং যখন এটি ভুল হয়ে যায়, শেষ হয় onerror
। সুতরাং, আপনার নিজের ক্লাসটি এটি করতেও করুন:
class EMailElement extends HTMLElement {
constructor() {
super();
this.uid = this.getAttribute('data-uid');
}
setAttribute(name, value) {
super.setAttribute(name, value);
if (name === 'data-uid') {
this.uid = value;
}
}
set uid(input) {
if (!input) return;
const uid = parseInt(input);
// don't fight the river, go with the flow
let getEmail = new Promise( (resolve, reject) => {
yourDataBase.getByUID(uid, (err, result) => {
if (err) return reject(err);
resolve(result);
});
});
// kick off the promise, which will be async all on its own
getEmail()
.then(result => {
this.renderLoaded(result.message);
})
.catch(error => {
this.renderError(error);
});
}
};
customElements.define('e-mail', EmailElement);
এবং তারপরে আপনি ইভেন্ট কল এবং শ্যাডো ডোমটির সাথে রেন্ডারলয়েড / রেন্ডারইয়ার ফাংশনগুলি সম্পাদন করুন:
renderLoaded(message) {
const shadowRoot = this.attachShadow({mode: 'open'});
shadowRoot.innerHTML = `
<div class="email">A random email message has appeared. ${message}</div>
`;
// is there an ancient event listener?
if (this.onload) {
this.onload(...);
}
// there might be modern event listeners. dispatch an event.
this.dispatchEvent(new Event('load', ...));
}
renderFailed() {
const shadowRoot = this.attachShadow({mode: 'open'});
shadowRoot.innerHTML = `
<div class="email">No email messages.</div>
`;
// is there an ancient event listener?
if (this.onload) {
this.onerror(...);
}
// there might be modern event listeners. dispatch an event.
this.dispatchEvent(new Event('error', ...));
}
এছাড়াও মনে রাখবেন আমি তোমার পরিবর্তিত id
একটি থেকে class
, কারণ যদি না আপনি কিছু অদ্ভুত কোড লিখতে শুধুমাত্র কখনও আপনার একটি একক উদাহরণস্বরূপ অনুমতি <e-mail>
কোনো পৃষ্ঠায় উপাদান, আপনি একটি অনন্য শনাক্তকারী ব্যবহার করে না এবং তারপর উপাদানের একটি গুচ্ছ তা নির্ধারণ করুন।