2013-03-21 76 views
1

在最新版本的Meteor中,添加了變換功能。流星重新應用收集變換

用法示例:

var myCollection = new Meteor.Collection("mycollection", 
{ 
    transform: function(doc){ 
     doc["newProperty"] = "test"; return doc; 
    }) 
} 

有什麼辦法使這些轉換重新計算?

我在DOM中使用時間人性化函數(MomentJS humanize),這實際上是對集合進行的唯一轉換,因此每10秒重新應用一次(對於大約15個條目)應該不會有的性能問題。

回答

1

的一種方法是把你的收取結果在Dependency

客戶JS:

var times = []; 
var timesDeps = new Deps.Dependency; 

var getTimes = function() { 
    Deps.depend(timesDeps); 
    return myCollection.find(); //Your Query 
}; 


Template.home.times = function() { 
    return getTimes(); 
} 

Meteor.setInterval(function() { 
    timesDeps.changed(); 
}, 10000) //Recalculate ever 10000 ms 

那麼什麼正在做的是你的收藏被稱爲與getTimes(),當你調用timesDeps.changed()其被動上下文無效,並刷新數據,從而再次調用變換。

+0

嗯我認爲變換沒有反應? – 2013-03-21 14:33:35

+0

轉換確實是被動的。每次調用'find()'時調用的轉換函數被調用,反應性方法在數據更新時調用,所以在這裏我每10秒手動使'timesDeps'內現有的反應性上下文無效 – Akshat 2013-03-21 14:58:42