0

使用 dom-repeat 循环和模板的常规使用,字段引用是针对源对象进行硬编码的。在下面的示例中,我们从 JSON 对象中提取名称和描述字段。工作正常。

 <template is="dom-repeat" items="[[subjects]]">
      {{item.name}},  {item.description}}
 </template>

在我的应用程序中,我想通过使用循环通过提供的字段列表的嵌套模板以编程方式提取值。但是我无法使其工作,结果以文字形式出现,而不是按照我的意愿执行:

 <template is="dom-repeat" items="[[subjects]]">
      <template is="dom-repeat" items="[[fields]]" as="field">
            {{item.{{field}}}},
      </template>
 </template>

这些是我尝试过的变体以及使用“名称”和“描述”作为字段的结果:

   {{item.{{field}}}},      ->  "{{item.name}}  {{item.description}}"
   {{item[ {{field}} ]}},   ->  "{{item[ name ]}}   {{item[ description ]}}"

理想情况下,我希望它像这样工作:

    someFunction( {{item}}, {{field}} )

someFunction 将接受对象和字段说明符并返回一个字符串。

只是不知道如何实现它。有任何想法吗?

附录显示了缺失的部分:

<iron-ajax>
      auto         
      url="https://api.github.com/users/burczu/repos"
      params='{"type":"all"}'
      handle-as="json"
      on-response="handleResponse">
</iron-ajax>

<script>

    class MyElement extends Polymer.Element {

      static get is() { return 'my-element'; }

      static get properties() {
        return {
            subjects: { type: Array },
            fields: { type: Object }
            };
        }

        ready() {
           super.ready();
           this.fields = JSON.parse('{"show": ["name", "description"] }').show;
        }

        handleResponse(data) {
            this.subjects = data.detail.response;
        }
    }

    window.customElements.define(MyElement.is, MyElement);
  </script>
4

1 回答 1

0

好的,解决方案离我想要的不远。这是应用正确语法的问题:

<template is="dom-repeat" items="[[subjects]]">
      <template is="dom-repeat" items="[[fields]]" as="field">
            [[ _formatText(item, field) ]],
      </template>
 </template>

<script>
     class MyElement extends Polymer.Element {
        . . .
        _formatText(obj, field) {
            return obj[field];
            }
        . . .
       }
</script>

虽然它可以按我的意愿工作,但 _formatText 函数返回的所有文本都将呈现为方括号之外的 HTML 安全字符串。没有机会发出浏览器识别的标签。:(

如果有人知道如何克服这个障碍,请告诉我。

于 2018-05-02T00:27:48.767 回答