2016-01-22 90 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