我有Iron Router和非常简单的pub / sub。
当发布只返回一些特定项目时 - 一切正常。但是当它在内部做一些逻辑时(通过另一个集合循环) - 它不起作用(Iron Router的加载模板一直显示,看起来没有数据来自本出版物的DDP)。
pub的代码:
Meteor.publish('ordersWithState', function(orderState) {
// if uncommented, this line works just fine
//return Orders.find({name:"C02336"});
var temp = Workflows.findOne({name:"CustomerOrder"});
if (temp) {
var stateUuid;
_.each(temp.state, function (state) {
if (state.name == orderState) {
return Orders.find({stateUuid: state.uuid});
}
});
}
});
路由器配置(如果需要):
this.route('ordersList', {
path: '/orders/list/:orderState?',
loadingTemplate: 'loading',
waitOn: function() {
console.log("in ordersList waitOn");
var orderState = this.params.orderState || "Требуется закупка";
return [
Meteor.subscribe('ordersWithState', orderState),
Meteor.subscribe('allSuppliersSub'),
Meteor.subscribe('tempCol'),
Meteor.subscribe('workflows')
];
},
data: function () {
return Orders.find({});
},
onBeforeAction: function (pause) {
this.next();
}
});
答案 0 :(得分:1)
问题在于您的出版物的逻辑:
if (temp) {
var stateUuid;
_.each(temp.state, function (state) {
if (state.name == orderState) {
return Orders.find({stateUuid: state.uuid});
}
});
}
您正在从内部_.each函数返回一些内容,但是您没有从发布函数返回任何内容。因此,该出版物未向Iron Router返回任何内容或使用this.ready();
进行回复。
我不清楚你要发布什么 - 一组游标或Orders.find()
$in: [arrayOfItems]
?无论如何,一旦出版物得到修复,Iron Router就可以正常工作。