2016-01-22 24 views
2

我想通过自定义元素名称x-names显示数组中的名称列表。显示名称列表中的代码如下:聚合物计算并设置属性值与this.set()不起作用

<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 

我相当聚合物新手,所以我相信这是一个快速解决方案,但它是100%逃脱我。我已经浏览了文档(我仍然习惯于这些文档),并尝试了其他几种方法,但都没有运气:

this.names = keysreturn keys不会产生错误,但它们也不反映名称为dom-repeat

回答

4

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

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

我曾尝试过'返回键',但它没有奏效。也许我在其他地方搞了一次绑定,但现在它按预期工作。感谢你的回答! – MandM