Я не вижу проблем с вашим кодом Elm, я думаю, что это проблема с вашим определением пользовательских элементов в JavaScript.
Я не знаком с API пользовательских элементов, но смотрю на вашикод (воспроизводится ниже):
customElements.define('test-elem', class TestElem extends HTMLElement {
constructor() {
super();
this.me = this;
}
connectedCallback() {
console.info(this.dataset.count);
var div = document.createElement("div");
this.appendChild(div);
div.innerText = "" + this.dataset.count;
}
});
и документация MDN для пользовательских элементов , очевидно, что вы должны изменить метод connectedCallback
на attributeChangedCallback
. Причина в том, что Elm использует виртуальный DOM и делает наименьшее количество реальных обновлений DOM возможным при изменении вашей модели. В частности, при изменении количества он не удалит пользовательский элемент из DOM и не добавит новый, он просто изменит соответствующий атрибут. Похоже, что ваш connecedCallback
не будет вызван, но attributeChangedCallback
должен быть.
Кроме того, как правильно заметил @Murdock (прочитав статью по MDN, в частности, раздел «Использование обратных вызовов жизненного цикла»)(лучше, чем я), атрибут data-count
должен быть явно установлен для наблюдения, используя геттер observedAttributes
, следующим образом:
static get observedAttributes() {
return ['data-count'];
}