Yorumlarınıza dayanarak, muhtemelen varlık yüklemeli diğer HTMLElement öğelerinin ne yaptığını yapmalısınız: sonuca bağlı olarak bir yük veya hata olayı oluşturarak yapıcıyı bir yandan yükleme eylemi başlatmasını sağlayın.
Evet, bu sözleri kullanmak anlamına gelir, ama aynı zamanda "işleri her HTML öğesiyle aynı şekilde yapmak" anlamına gelir, bu yüzden iyi bir şirketdesiniz. Örneğin:
var img = new Image();
img.onload = function(evt) { ... }
img.addEventListener("load", evt => ... );
img.onerror = function(evt) { ... }
img.addEventListener("error", evt => ... );
img.src = "some url";
bu, kaynak varlığın, başarılı olduğunda, sona erdiğinde onloadve yanlış gittiğinde sona eren eşzamansız yükünü başlatır onerror. Yani, kendi sınıfınızı da yapın:
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);
Ve sonra renderLoaded / renderError işlevlerini olay çağrıları ve shadow dom ile ilgilenirsiniz:
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', ...));
}
Ayrıca Seninkini değişti dikkat ida classsize bazı garip kod yazmak sürece sadece hiç tek bir örneği izin çünkü, <e-mail>bir sayfadaki eleman, benzersiz bir tanımlayıcı kullanmak ve daha sonra elemanların bir grup atamak mümkün değil.