2015-06-24 98 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