我不知道怎麼說這個,但基本上我正在實現一個日期選擇器,所以用戶可以選擇數據顯示的範圍。用戶選擇一個開始數據和結束日期,然後,我重新運行一個位於lib
文件夾中的巨大功能來重新運行並更改主頁上通過Meteor幫助程序顯示的所有數據。在Meteor(datepicker)中用戶輸入更改時顯示數據的最佳方式是什麼?
用戶選擇的日期存儲在會話變量中,這些變量可以在我打算使用的函數中訪問。該函數將運行,但客戶端上不會顯示任何更改(但控制檯中的這些更改都是真實的,並且我可以在整個函數中看到通過console.log
聲明進行的更改)。
這是日期選擇器的功能onRendered什麼樣子:
Template.dashboard.onRendered(function(){
// Date picker
$(function() {
function cb(start, end) {
$('#reportrange span').html(start.format('MMMM D, YYYY') + ' - ' + end.format('MMMM D, YYYY'));
var startDate = start.format('MMMM D, YYYY');
Session.set("startingDate", startDate)
var endDate = end.format('MMMM D, YYYY');
Session.set("endingDate", endDate);
}
var firstDate = dates[0];
var lastItem = dates.length-1;
var lastDate = dates[lastItem]
cb(moment(firstDate), moment(lastDate));
$('#reportrange').daterangepicker({
ranges: {
'Last 7 Days': [moment().subtract(6, 'days'), moment()],
'Last 30 Days': [moment().subtract(29, 'days'), moment()],
'This Month': [moment().startOf('month'), moment().endOf('month')]
}
}, cb);
});
});
的Tracker.autorun:
Tracker.autorun(function(){
libFxn();
});
libFxn()
是我在跟蹤調用lib文件夾中的相當大的作用。所以,只要有一個Session變量由於用戶輸入而發生變化,Tracker.autorun
火焰和函數就會運行並且值正在改變,我可以通過控制檯看到這些值。但是,在客戶端,我沒有看到這些變化。
這使我處於兩難境地:我需要顯示基於用戶輸入所產生的數據變化,但:
1)沒有出現在客戶端的變化,即使是正在執行的lib文件夾功能。 2)我不能使用document.location.reload(true);
或以任何方式刷新頁面,因爲當頁面刷新時,會話變量將恢復爲默認值(這是我手邊的dates
陣列的第一個日期和最後一個日期)。
所以我需要找出一種方法來發送用戶的日期輸入數據到lib文件夾中的函數,以便顯示客戶端/模板中不涉及Sessions的更改(如果頁面必須被刷新。
如果有人能給我提示或提示,我將不勝感激。
這裏是一個幫手,這基本上是相同的所有其他減去它調用不同的變量(所有這些變量都在libFxn()
功能和被填充有和稱爲經由這些輔助功能)的例子:
WinRate: function(){
if(Number((((wins/gamesPlayed))))){
return numeral((wins/gamesPlayed)).format('0%');
} else if(Number((((wins/gamesPlayed)))) === 0){
return "0%"
} else{
return "n/a";
}
}
對事物的持久性方面,如果更新的集合不是一個選項,查看使用反應localStorage的封裝之一和數據推到HTML5的localStorage層將讓您在頁面重新加載堅持它。 –
感謝您的評論。我能夠將日期保存在MongoDB集合中,然後在lib函數中調用它們,並且一切正常。我用'document.location.reload(true);'來刷新頁面並呈現數據。然而,現在唯一吸引人的地方是,它看起來真的很貧窮,我不得不找到一種方法讓這看起來更平滑,更具「反應性」。 –
你的模板和助手是如何設置的,你可以在這裏或在回購站顯示它們嗎? –