首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何动态填充铁列表元素

如何动态填充铁列表元素
EN

Stack Overflow用户
提问于 2016-01-11 15:02:06
回答 2查看 3.5K关注 0票数 1

因此,我有一个用于用户数据历史的铁列表元素。铁列表不是自定义元素的一部分。它只是在页面上。一旦用户成功登录,我想填充。也许这只是我对聚合物缺乏经验,但似乎没有一个简单的方法来做到这一点。第一次尝试(简化阅读,例如我实际上没有使用jquery,有很多错误处理代码我省略了,等等):

代码语言:javascript
复制
<iron-list as="item" style='height: 100%;' id='history-list'>
  <template>
    <div style='min-height: 140px;'>
      <ul>
        <!-- various fields for each record as list items -->
      </ul>
    </div>
  </template>
</iron-list>
<script>
  //once user is logged in
  var items = $.getJSON('userhistoryscript');
  //setAttribute doesn't work either
  document.getElementById('history-list').items = items;
</script>

我发誓这在早期版本的聚合物中起了作用。但现在似乎不起作用了,这很好,但我需要一个替代方案。

我考虑过的一些替代方案:

  1. 在相同的DOM作用域中设置铁-ajax元素,并在用户登录后设置‘URL’以触发xhr请求。我不确定这是否有效。
  2. 将列表包装在自定义元素中,并在chrisW的回答中使用铁元查询。

这些选择都很糟糕。我不敢相信没有比这更简单的方法来完成这一壮举。如何根据用户输入有条件地获取数据,并动态地向页面添加铁列表(或更新已经存在的铁列表)?这个用例真的没有API吗?

更新

谢谢你的回答。原来我的原始代码工作得很好:这实际上是一个构建过程问题。由于某种原因,当我通过bower安装项目依赖项时,铁列表没有安装。我拿出硫化的进口(它肯定没有包含一个参考铁名单),并直接进口所有的元素,然后我得到404,并了解了发生了什么。

EN

回答 2

Stack Overflow用户

发布于 2016-01-11 16:35:44

我认为,对于最佳实践,您应该使用this.$.historyList来重新定义这个元素的id。无论如何,当您获得数据填充iron-list时,您应该使用this.set('items', data); --使用元素的示例如下所示:

代码语言:javascript
复制
<iron-list>
    <template is="dom-repeat" items="{{data}}" as="history">
        <!--history.property-->
    </template>
 </iron-list>

<script>
  Polymer({
    properties:{
        data:{type:Array, value:[],}
    },
    _functionToSetDataWhenUserIsLoggedIn: function(data){
        this.set('data',data);
    }
  });
</script>

编辑

铁表的一个例子

代码语言:javascript
复制
<template is="dom-bind">
  <iron-ajax url="data.json" last-response="{{data}}" auto></iron-ajax>
  <iron-list items="[[data]]" as="item">
    <template>
      <div>
        Name: <span>[[item.name]]</span>
      </div>
    </template>
  </iron-list>
</template>

此示例使用ajax调用,该调用自动执行并填充iron-list,而无需创建自定义元素。

关于iron-list的更多信息,请访问:

https://elements.polymer-project.org/elements/iron-list

票数 2
EN

Stack Overflow用户

发布于 2016-01-11 19:22:00

我不完全理解你的问题。希望这能有所帮助。

代码语言:javascript
复制
  <iron-list items="[[data]]" as="item">
    <template>
      <div>
        Name: <span>[[item.name]]</span>
      </div>
    </template>
  </iron-list>   

    properties:{
        data:{type:Array, value:[],}
    },
    // the attached function is automatically called 
    attached: function() {
       // Use an iron meta in the element that you keep track in of login information
       // or create an onLogin listener
       var isLoggedIn = new Polymer.IronMetaQuery({key: 'isLoggedIn'}).value, 
       if (isLoggedIn) {
          var jsonData = $.getJSON('userhistoryscript'); 
          this.set('data',jsonData);
       }
    }

请注意,当通过聚合物元素中的in访问元素时,请确保这样做:

代码语言:javascript
复制
this.$.elementId

代码语言:javascript
复制
Polymer.dom('#elementId')

编辑,因为您不想创建一个自定义的聚合物元素

源代码

代码语言:javascript
复制
  <template is="dom-bind">
    <iron-list id="list">

    </iron-list>  

  </template>

  <script>
    document.addEventListener('onLogin', function(event) {
      var list = document.getElementById('#list');
      var jsonDataObjects = $.getJSON('userhistoryscript'); 
      for (var i = 0; i < jsonDataObjects.length; i++) {
        var div = document.createElement('div');
        div.textContent = jsonDataObjects[i].info; // change this line
        list.appendChild(div);
      }

    });
  </script>
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/34724594

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档