2013-04-26 3 views
2

На клиенте у меня есть это:Meteor: Deps.autorun не срабатывает при обновлении коллекции

var Coll1 = new Meteor.Collection('myCollection1'); 
var Coll2 = new Meteor.Collection('myCollection2'); 

var handle1 = null; 
Deps.autorun(function() { 
    var temp = Session.get('id'); 
    if (id) handle1 = Meteor.subscribe('myCollection1', id); 
}; 

var handle2 = null; 
Deps.autorun(function() { 
    var temp = Session.get('id'); 
    if (id) handle2 = Meteor.subscribe('myCollection2', id); 
}; 

И в другом месте в коде шаблона, я делаю это (когда пользователь нажимает на элемент DOM):

Coll1.insert({name: 'new element1'); 
Coll2.insert({name: 'new element2'); 

Приведенный выше код не вызывает обновление Coll1 и Coll2 в клиенте (но хорошо на сервере). Если я обновляю свой браузер, выполняется обновление, то есть клиент синхронизируется с сервером и отображает новые элементы.

Что мне не хватает?

ответ

3

вы не по всей видимости, изменения реактивной переменной здесь Session.get('id')

Deps.autorun работает как так

Deps.autorun(function(){ 
    var iAmReactive = Session.get('iAmReactive'); 
    <subscribe to something using iAmReactive> 
}); 

если значение сеанса для iAmReactive изменений, подписка повторно запустить

также это может быть что-то вроде

Deps.autorun(function(){ 
    var iAmAReactiveQuery = Collection.find({<query>}); 
    <subscribe to something> 
}); 

в этом случае, если данные в изменении запроса, подписка будет выполнен заново


, что делает функция публиковать выглядеть? вы уверены, что вставленные элементы возвращаются с параметром id?

+0

ОК, я думал, что 'Meteor.subscribe()' или 'handles' сами являются реактивными источниками и будут запускать обновление при изменении коллекции (через' insert'), но это не так. Как я могу запустить повторный запуск функций 'Deps.autorun()' после вставки? –

+1

для вашего кода вам просто нужно установить сеанс var - например, 'Session.set ('id', somethingNew)' - внимательно посмотрите на http://docs.meteor.com/#reactivity - его довольно хорошо выложено там о том, что вызовет повторный запуск реактивного вычисления (deps.autorun) –

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