【发布时间】:2016-12-19 06:26:48
【问题描述】:
我正在尝试将自定义元素中的数据属性作为对象传递,但同时在 attachCallback 方法中接收以字符串形式获取值“[object object]”。
那么任何人都可以帮助我弄清楚如何将属性作为对象在自定义元素(Web 组件)中获取。
代码示例
<script>
class myElements extends HTMLElement {
createdCallback() {
this.innerHTML = `<h1>Hello</h1>`;
}
attachedCallback() {
console.log(this.getAttribute('data'));
}
}
document.registerElement('my-element', myElements);
</script>
自定义元素标签
<script>
var object = { key1: 111, key2: 222, key3: function(){return "hi"}, key4:[1,2,3]};
function changeHandler() {
page('/default', function() {
// some logic to decide which route to redirect to
if (admin) {
page.redirect('/admin');
} else {
page.redirect('/guest');
}
});
}
</script>
<my-element data="object" onchange="changeHandler"></my-element>
注意:假设<my-element> 是一个下拉菜单,让用户可以选择一些值。
解决方案:自定义元素规范中仍然没有原生解决方案(v0 和 v1)。
由于自定义元素不支持数据绑定,因此我们需要一个糖化层(例如,Polymer 或 SkateJS),正如@tony 在评论中提到的那样。
【问题讨论】:
-
data-*属性值处缺少引号。在html元素的属性中存储函数的目的是什么? -
@coder "主要目的是将属性中的函数作为回调处理程序传递"你有什么问题?您可以将
object定义为全局变量,并使用括号表示法来引用object。 -
object和changeHandler只是这些属性值中的字符串,与您的 JS 代码无关。请告诉我们您用于获取[object object]的确切代码。
标签: javascript web-component custom-element