【发布时间】:2017-03-29 07:00:39
【问题描述】:
我目前正在尝试实现一个转发器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 并且通过扩展,破坏该功能并仅显示 @987654327 @
这是我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 的唯一原因。
【问题讨论】:
标签: javascript html dom web-component custom-element