2014-09-13 71 views
2
力重繪

我的流星的應用所顯示的用戶併爲每個用戶它顯示MeteorJS - 模板

  • 列表顯示隨着時間的推移
  • 最近用戶的得分小則圖表分數

由於用戶有不同類型的分數(例如score1,score2,score3),我允許一組單選按鈕來選擇要顯示的分數。

下圖是使用jQuery的火花插件抽取及其在「繪製的」功能

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」條件。

現在每次我選擇不同的單選按鈕,它看起來像現有的模板不會刷新(是流星'重新使用'現有的模板,因爲它已經在那裏?)。

當我第一次運行我的應用程序時,可以看到「呈現」被打印出10次。但是如果我選擇了不同的分數類型,我現在只能看到6個「渲染」消息,這是因爲4個模板已經存在。所以圖表不會被更新。

如何強制模板重新渲染?或者有更好的方法來做到這一點?

回答

0

有沒有函數來強制重新渲染。當依賴關係發生變化時,模板將自動重新呈現。所以爲了讓listItem重新渲染,它需要依賴一個被動資源。

這會通過放入Session變量來簡化。例如,假設您將currentScoreType存儲爲會話變量。然後改變你的第四行:

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

您也可以考慮使用Tracker.autorun,它可以實現無聲明全局會話變量相同的結果。