polymer 使用 this.set() 计算和设置属性值不起作用

标签 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 =keysreturnkeys 不会生成错误,但它们也不会将名称反射(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/

相关文章:

javascript - 我可以将 Polymer 元素/WebComponents 与 TinyMCE 一起使用吗?

javascript - Polymer Firebase 页面刷新返回 404 错误(找不到路由页面)

javascript - 导航离开然后返回时, polymer 按钮/文本变粗

javascript - polymer iron-ajax调用以及如何在绑定(bind)发生之前修改/过滤响应?

javascript - 如何在 Polymer 中包含可重用元素中的行为?

javascript - 如何根据从 <iron-ajax> 接收的数据创建重复元素?

html - polymer 造型 :host[attribute] failed

android - 带有 Bower 的 Polymer 导致 Cordova 中的构建失败

javascript - polymer dom-repeat 数据上下文未设置

dart - 如何获得铁表(聚合物 Dart )中元素的模型?