2015-06-24 61 views
0

我有铁路由器和很简单的酒吧/分。流星出版物不工作

当发布只是返回一些特定的项目 - 一切工作正常。但是当它在内部执行某些逻辑时(循环通过另一个集合) - 它不起作用(Iron Router的加载模板会一直显示,并且看起来没有数据通过此发布中的DDP发布)。

酒馆代码:

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

你在服务器控制台上什么也没得到?它看起来像你的发布功能中的错误。 – Billybobbonnet

+0

是的,Jeremy指出,pub函数的结构是错误的。 – Egor

回答

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应该可以正常工作。

+0

唉谢谢指出,完全忽略了内在的功能。我想要返回具有特定stateUuid的订单,这是在“Workflow”嵌入式文档中的某处。 – Egor