我正在尝试通过自定义元素名称 x-names
显示数组中的名称列表。显示姓名列表的代码如下:
<x-names names="{{names}}"></x-names>
<template is="dom-repeat" items="[[names]]" as="name">
<h5>Name: [[name]]</h5>
</template>
x-names
元素定义如下:
<dom-module id="x-names">
<template>
<akc-meta-query key="names" value="{{_namesObject}}"></akc-meta-query>
</template>
<script>
Polymer({
is: 'x-names',
properties: {
names: {
type: Array,
computed: '_namesObjectToArray(_namesObject)',
value: [],
notify: true
},
_namesObject: {
type: Object
}
},
_namesOjbectToArray: function(obj) {
if (obj) {
var keys = Object.keys(obj);
this.set('names', keys);
}
}
});
</script>
</dom-module>
对象的键是名称,所以我只想获取键并将该数组设置为 names
属性,但是,我收到以下错误:
Uncaught TypeError: Cannot set property names of #<x-names> which has only a getter
我对 Polymer 还很陌生,所以我确信这是一个快速修复,但它 100% 没有让我理解。我浏览了文档(我仍在习惯),并尝试了其他几种方法,但没有成功:
this.names =keys
和 returnkeys
不会生成错误,但它们也不会将名称反射(reflect)到 dom-repeat
.
最佳答案
您不应在为计算
定义的函数中进行设置。该函数应返回值
_namesOjbectToArray: function(obj) {
if (obj) {
return keys = Object.keys(obj);
}
// else {
// return [];
// }
}
关于 polymer 使用 this.set() 计算和设置属性值不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34947860/