【问题标题】:Polymer - reload core-list dataPolymer - 重新加载核心列表数据
【发布时间】:2014-07-28 10:31:19
【问题描述】:

我想重新加载一个 core-list 元素来显示新数据,但它并不令人耳目一新。 我重新调用生成数据但不起作用的 JS 函数......并且像“正常”div 一样重新加载也不起作用!如果我重新加载整个页面,列表只会显示新数据...

function values(sender, textomsg, datacriacao, senderfoto){
   var sender2 = sender.split(",");
   var textomsg2 = textomsg.split(",");
   var datacriacao2 = datacriacao.split(",");
   var senderfoto2 = senderfoto.split(",");

   var namegen = {
       generateString: function (inLength) {
           var s = '';
           for (var i = 0; i < inLength; i++) {
               s += String.fromCharCode(Math.floor(Math.random() * 26) + 97);
           }
           return s;
       },
       generateName: function (inMin, inMax) {
           return this.generateString(Math.floor(Math.random() * (inMax - inMin + 1) + inMin));
       }
};

Polymer('list-test', {

    count: sender.length,
    ready: function () {
        this.data = this.generateData();

    },
    generateData: function () {
        var names = [], data = [];
        for (var i = 0; i < this.count; i++) {
            names.push(namegen.generateName(4, 8));
        }
        names.sort();
        for (var i = 0; i < this.count; i++) {
            data.push({
                index: i,
                sender: sender2[i],
                textomsg: textomsg2[i],
                datacriacao: datacriacao2[i],
                senderfoto: senderfoto2[i]
            });
        }

        return data;

    },
    tapAction: function (e) {
        console.log('tap', e);
    }
});

}

<template id="templateConversas" runat="server">

  <div id="item" class="item {{ {selected: selected} | tokenList }}"  ><%--onClick="conversa('{{name}}');"--%>
    <div class="message" style="background-image: url({{senderfoto}});">
      <span class="from"><br/>{{sender}}</span>
      <span class="timestamp">{{datacriacao}}</span>
      <div class="subject"><br/>{{textomsg}} </div><%--------Infinite List. {{index}}--%>
      <%--<div class="body"><br/>Mensagem de teste...........</div>--%>
    </div>
  </div>

     </template>

问题还在于重新加载“列表测试”。如果我在加载列表后调用 js 函数,它不会应用新数据...

【问题讨论】:

    标签: polymer


    【解决方案1】:

    您的代码不完整,因此很难理解,但我认为问题在于您没有将 generateData() 函数的结果分配给模板的模型。为您的组件尝试以下脚本

    Polymer('list-test', {
      created: function () {
         this.data = [];
      },
      refresh: function () {
         this.data = this.generateData();
      },
      generateData: function () {
        // your original code here
      }
    });
    

    现在,当您调用list-test 元素的refresh() 时,应该使用新生成的数据更新列表内容。在创建元素时填充列表添加

    ready: function () {
       this.refresh();
    },
    

    【讨论】:

    • 如何从另一个 js 调用函数(刷新)?我将值从后面的代码传递给 JS 函数(值)...这就是代码不完整的原因...抱歉 :)
    • 与您调用任何“标准”元素的方法相同,即 setAttribute() - 您需要获取对要使用的节点/元素的引用,然后您可以访问它的属性并将其称为方法。
    • 问题还在于重新加载'list-test'。如果我在加载列表后调用 js 函数,它不会应用新数据......我怎样才能重新加载元素???非常感谢你的帮助:)
    • list-test 元素的刷新方法应该改变列表的内容 - 据我了解 generateData() 生成一堆随机数据......问题可能是元素的 @ 987654327@ 属性未正确初始化...将其设置为 count: 10 并查看您现在每次调用刷新时是否有 10 个新字符串。
    • 好的...我将它设置为 10 并且它相同但只有 10 行...当我调用刷新时正在生成数据,但我猜它没有显示它,因为数据它不受“列表测试”的限制......它显示相同的内容。如果我调用这个 document.getElementById('list-test').count = 2;该列表将传递到 10 到 2 行...但是如果我调用 document.getElementById('list-test').refresh();不显示新数据...它保持不变...
    猜你喜欢
    • 1970-01-01
    • 2011-01-29
    • 2013-03-05
    • 1970-01-01
    • 1970-01-01
    • 2012-07-17
    • 1970-01-01
    • 2010-11-12
    • 2011-02-22
    相关资源
    最近更新 更多