使用this.set()的聚合物计算和设置属性值不起作用

时间:2016-01-22 13:29:34

标签: polymer polymer-1.0

我正在尝试通过自定义元素名称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 = keysreturn keys不会生成错误,但它们也不会将名称反映到dom-repeat

1 个答案:

答案 0 :(得分:4)

您不应该为computed定义的功能进行设置。此函数应返回值

  _namesOjbectToArray: function(obj) {
    if (obj) {
      return keys = Object.keys(obj);
    } 
     // else {
     // return [];
     // }
  }