приписать мой вариант, чтобы знать, какой элемент я должен повторить. Спасибо :)
час пытаюсь реализовать ретрансляторWebComponent
чтобы позволить компании легко создавать фронт-энд, не завися от каких-либоframework
(решение принимается архитектурой).
Вот мой текущий код:
<ul>
<company-repeat datas='[{"name": "NameValeur", "value": "valeurId"}, {"name": "NameObject", "value": "objectId"}]'>
<li>${name}</option>
</company-repeat>
</ul>
<select name="" id="">
<company-repeat datas='[{"name": "NameValeur", "value": "valeurId"}, {"name": "NameObject", "value": "objectId"}]'>
<option value="${value}">${name}</option>
</company-repeat>
</select>
list
правильно работает, так как кажется, что нет никаких ограничений на то, какой тег разрешен внутри, но выбор не позволяетcustomElement
company-repeat
в нем и расширении, сломайте функцию и просто отобразите<option value="${value}">${name}</option>
Вот исходный код моегоWebComponent
class CompanyRepeater extends HTMLElement {
connectedCallback() {
this.render();
}
render() {
let datas = JSON.parse(this.getAttribute('datas'));
let elementType = this.getAttribute('element');
this.template = this.innerHTML;
console.log(elementType);
let htmlContent = elementType !== null ? `<${elementType.toLowerCase()}>` : '';
datas.forEach(elem => {
htmlContent += this.interpolate(this.template, elem)}
);
htmlContent += elementType !== null ? `</${elementType.toLowerCase()}>` : '';
this.innerHTML = htmlContent;
}
interpolate(template, obj) {
for(var key in obj) {
const pattern = "${" + key + "}";
if(template.indexOf(pattern) > -1) {
template = template.replace(pattern, obj[key]);
delete(obj[key]);
}
};
return template;
}
}
customElements.define('company-repeat', CompanyRepeater);
Мой вопрос сейчас, как я могу заставить его работать, независимо от того, что родительский элемент? Я добавил недвижимостьelement
моему репитеру, но он не позволяет мне объявлять больше атрибута, и он не будет работать внутри таблицы.
Это единственное, что мешает мне перевести все на WebComponent.