MeteorJS - 强制重绘模板

时间:2014-09-13 15:15:48

标签: javascript meteor

我的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,并按照降序选择的分数类型对用户进行排序。

因此,您可以将单选按钮视为选择"按顺序排列"条件。

现在,每当我选择不同的单选按钮时,看起来现有的模板都不会刷新(Meteor'重新使用'现有的模板,因为它已经存在?)。 / p>

当我第一次运行我的应用程序时,我可以看到"呈现"被打印出10次。但是,如果我选择不同的分数类型,我现在只能看到6"渲染"消息和那是因为4个模板已经存在。因此图表没有更新。

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

1 个答案:

答案 0 :(得分:0)

无法调用强制重新渲染的功能。模板在其依赖项发生更改时会自动重新呈现。因此,为了让listItem重新呈现,它需要依赖于被动资源。

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

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

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