주석을 기반으로 자산로드가있는 다른 모든 HTMLElement가 수행하는 작업을 수행해야합니다. 생성자가 사이드로드 작업을 시작하고 결과에 따라로드 또는 오류 이벤트가 생성되도록합니다.
그렇습니다. 약속을 사용하는 것을 의미하지만 "다른 모든 HTML 요소와 동일한 방식으로 작업을 수행"한다는 의미이므로 좋은 회사입니다. 예를 들어 :
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 / renderError 함수가 이벤트 호출 및 shadow dom을 처리하도록합니다.
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
A와 class
당신이 몇 가지 이상한 코드를 작성하지 않는 한 오직 당신의 단일 인스턴스 수 있기 때문에, <e-mail>
한 페이지에 요소가 고유 한 식별자를 사용하고 요소의 무리에 할당 할 수 없습니다.