Polymer - 迭代模板中的对象

2023-12-11

根据聚合物文档,可以使用以下方法迭代对象或数组repeat中的声明<template>:

“表达式”可以是一个简单的标识符、路径或完整表达式(包括对象和数组文字)。

然而,经过测试后,重复语句似乎只适用于数组,而不适用于对象:

http://jsbin.com/oqotUdE/4/edit

我做错了什么吗?


我最近遇到了这个问题,并通过使用返回的过滤器解决了这个问题Object.keys(obj)。下面是如何执行此操作的简单示例(也许有更好的方法,如果是的话,请赐教)...

<template repeat="{{item in obj | getKeys}}">
  <span>Key: {{item}}</span>
  <span>Value: {{obj[item]}}</span>
</template>

...etc...

<script>
Polymer('my-element', {
  // yes i know, instantiate arrays/objects in the created method,
  // but this is just an example
  obj : {}, 

  // my custom filter function to use in looping objects
  getKeys : function(o){
    return Object.keys(o);
  }

});
</script>

当然,您可以变得更复杂,检查数据类型并确保它是一个对象。下面是一个递归版本,循环遍历无限嵌套对象(同样,如果有更简单的方法,请告诉我)

<template if="{{obj}}" id="root" bind="{{obj as o}}">

  <ul>

    <template repeat="{{item in o | getKeys}}">
      <li>

        <span class="key">{{item}}</span>

        <template if="{{o[item] | isNotObject}}">
          <span class="value">{{o[item]}}</span>
        </template>

        <template if="{{o[item] | isObject}}">
          <template ref="root" bind="{{o[item] as o}}"></template>
        </template>

      </li>
    </template>

  </ul>

</template>

...etc...

<script>
Polymer('object-view', {

  obj : {},

  getKeys : function(o){
    return Object.keys(o);
  },

  isObject : function(v){
    return typeof(v) === "object";
  },

  isNotObject : function(v){
    return typeof(v) !== "object";
  }

});
</script>

这当然有效(对我来说),循环遍历对象(和数组, 实际上)。虽然,我对使用并不完全满意Object.keys。很快我会很高兴看到聚合物中对对象迭代的支持。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Polymer - 迭代模板中的对象 的相关文章