2015-12-14 40 views
3

我需要在另一个集合中继续一个collection.find()。我有一个名为Orders的集合。在另一个集合中使用collection.find()的流星

Orders = new Mongo.Collection('orders') 
Orders.attachSchema(new SimpleSchema({ 
clientId: { 
    type: String 
    }, 
    orderDate: { 
    type: Date 
    } 
}); 

它使用aldeed:collection2和aldeed:简单的shema。我用它来创建使用aldeed的表单:autoform

我想将一个allowedValues放在ClientId字段中,该字段将包含客户端ID。 所以我需要使用Clients.find()获取所有客户端ID。客户是另一个集合。但在客户端上,如果我尝试将console.log(Clients.find()。fetch())放入我的order.js集合文件中,它将在服务器上记录一个空数组,并记录包含我所有客户端的数组。我不介意在客户端可用集合之前调用函数。但即使将它包装在Meteor.startup中也是行不通的。有人有线索吗?

+0

您是否正确地发布你的客户收集到客户端? – Curtis

+0

我正在使用自动发布功能。 – yves

回答

1

我想你要做的是限制Order编辑器中客户端的选择。你可以创建一个帮助像下面

Template.editOrder.helpers 
    clientList:()-> 
    Client.find().fetch() 

,并使用该助手与自动窗体

{{> afQuickField name="clientSelected" options=clientList}} 
0

其实,这是相当棘手的这一切都在一起,因为我还需要验证在客户端领域。所以我用由Ryan表示,但添加一些东西,需要的解决方案:

var ordersShema = { 
clientId: { 
    type: String, 
    allowedValues: clientsId 
    },.. 
} 

Orders.attachSchema(new SimpleSchema(ordersShema)); 

与clientsId beeing是其中动态地从客户端收集上传的ID。 但是这在服务器端是好的,但在客户端,clientsId仍然是空的,验证是不可能的。所以我不得不在客户端上添加以下代码:

Tracker.autorun(function() { 
    Orders._c2._simpleSchema._schema.clientId.allowedValues = Labelizer.allowedValues(Clients.find(),'_id'); 
}); 

(Labelizer仅仅是创建一个从光标ALLOWEDVALUES功能)。

当然,这些选项是用助手生成的。

Template.ordersAdd.helpers({ 
    clientsList:function(){ 
    return Labelizer.options(Clients.find(),'_id',['name','surname'],' '); 
    },... 
} 

等等领域与这个辅助的伟大工程:

{{> afQuickField name='clientId' options=clientsList}}