2015-06-14 3 views
0

У меня есть очень простой проект с одним вызовом Meteor.publish:Meteor.publish обратного вызова не вызывается

Boxes = new Meteor.Collection("boxes"); 

if (Meteor.isServer) { 
    Meteor.startup(function() { 
    Boxes.remove({}) //clearing the database 
    Boxes.insert({ //adding one element to the database 
     boxes: [1], 
     currentId: 1 
    }); 
    }); 
    console.log("publish1") 
    Meteor.publish("boxes", function() { 
    console.log("publish2") //this does not run! ever! 
    return Boxes.find(); 
    }); 
} 

По какой-то причине не кажется мой Meteor.subscribe работать (коллекции всегда возвращаются пустыми), поэтому я поместил пару console.log в свой код. По какой-то причине мой код сервера печатает «publish1», но он не печатает «publish2», а если я попробую то же самое в примере проекта, он печатает оба.

примечание: я удалил автоматически опубликованный пакет.

ответ

2

Вы должны подписаться на его клиента. Эта работа для меня:

Boxes = new Meteor.Collection("boxes"); 

if (Meteor.isServer) { 
Meteor.startup(function() { 
    Boxes.remove({}) //clearing the database 
    Boxes.insert({ //adding one element to the database 
    boxes: [1], 
    currentId: 1 
    }); 
}); 
console.log("publish1") 
Meteor.publish("boxes", function() { 
    console.log("publish2") //this does not run! ever! 
    return Boxes.find(); 
    }); 
} 

if(Meteor.isClient){ 

    Meteor.subscribe('boxes'); 

} 

publish2 только получить печатные, когда вы открываете приложение в браузере.

+0

Да, это имеет смысл для отзыва отзыва, который вызывается только тогда, когда пользователь действительно запрашивает данные. Моя проблема не была связана с этим – Hoffmann

0

Создайте отдельный файл JavaScript на пути (your_project/server/) как publish.js и поместите функцию публикации в этот файл.

Meteor.publish("boxes", function() { 
    console.log("publish2") //this does not run! ever! 
    return Boxes.find(); 
}); 

Затем подписываться эту публикацию в своем соответствующем файле JS на стороне клиента, как

Meteor.subscribe('boxes'); 
+0

Если он по-прежнему вызывает исключение для разрешения или доступа к «ящикам», вам необходимо добавить следующий код в 'your_project/shared/collections.js'. 'Boxes = new Meteor.Collection (" boxes "); Boxes.allow ({ вставка: функция() { возвращает истину; }, обновление: функция() { возвращает истину; }, удалить: функция() { возвращает истину; }} ) ; ' При необходимости ознакомьтесь с моим предыдущим [SO Question] (http://stackoverflow.com/questions/28223725/meteor-insert-failed-method-not-found/28667898#28667898), подобным этому. – Greenhorn

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