【问题标题】:MeteorJS - force redraw of templatesMeteorJS - 强制重绘模板
【发布时间】:2014-09-14 05:01:33
【问题描述】:

我的 Meteor 应用显示用户列表以及它显示的每个用户

  • 显示用户分数随时间变化的小图表
  • 最近的分数

由于用户有不同类型的分数(例如 score1、score2、score3),我允许一组单选按钮选择要显示的分数。

图表是使用 jQuery sparkline 插件绘制的,并且是在“渲染”函数中绘制的

Template.listItem.rendered = function() {
  console.log("rendered");

  arr = createChartArray(this.data, currentScoreType); // gets the array of scores for the current score type
  $(this.find(".itemBodyLeft")).sparkline(arr, {
    width:60,
    height:35,
    lineColor:"#FF2F00",
    fillColor:"#fff0dc"
  });
};

我正在使用 IronRouter,因为有很多用户,所以我将用户列表限制为 10 个,然后按降序对用户进行排序。

因此您可以将单选按钮视为选择“order by”条件。

现在,每次我选择不同的单选按钮时,看起来现有模板都没有刷新(Meteor 是否“重新使用”现有模板,因为它已经存在?)。

当我第一次运行我的应用程序时,我可以看到“渲染”被打印了 10 次。但如果我选择不同的乐谱类型,我现在只能看到 6 条“渲染”消息,那是因为其中 4 个模板已经存在。所以图表没有更新。

如何强制重新渲染模板?或者有更好的方法吗?

【问题讨论】:

    标签: javascript meteor


    【解决方案1】:

    没有调用函数来强制重新渲染。当它们的依赖关系发生变化时,模板会自动重新呈现。所以为了让listItem重新渲染,它需要依赖一个响应式资源。

    通过放入 Session 变量,这将是最简单的。例如,假设您将currentScoreType 存储为会话变量。然后将第四行更改为:

    arr = createChartArray(this.data, Session.get("currentScoreType"));
    

    您也可以考虑使用Tracker.autorun,它可以在不声明全局会话变量的情况下达到相同的结果。

    【讨论】:

      猜你喜欢
      • 2012-12-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-05-10
      • 2011-11-16
      • 2013-01-08
      相关资源
      最近更新 更多