2013-03-21 3 views
1

В последней версии Meteor была добавлена ​​функциональность преобразования.Meteor Reapply Collection Transform

Пример использования:

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

Есть ли способ, чтобы вызвать эти преобразования должны быть пересчитаны?

Я использую функцию гуманизации времени (MomentJS гуманизировать) в DOM, и это буквально единственное преобразование делается для коллекции, поэтому повторно применять его один раз каждые 10 секунд (в течение примерно 15 записей) не должно быть большим количеством хитов.

ответ

1

Одним из способов может быть поставить свой результат сбора в Dependency

Client 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

Хм, я думал, что трансформации не были реактивными? –

+0

Преобразования действительно реактивны. Функции преобразования, применяемые каждый раз, когда 'find()' вызывается, которые вызовут методы реактивности при обновлении данных, поэтому здесь я вручную аннулирую существующие контексты реактивности в 'timesDeps' каждые 10 секунд – Akshat

Смежные вопросы