2013-05-19 52 views
1

我有兩個類別,對於一些objectsparents動態汽提從它們的字段的對象在流星

Objects = new Meteor.Collection('objects'); 
Parents = new Meteor.Collection('parents'); 

的對象包含的某些字段,並且是指一個父對象,例如:

Objects.insert({ name: "o1", parent: "p1", f1: "val1", f2: "val2", f3: "val3" }); 
Objects.insert({ name: "o2", parent: "p2", f1: "val4", f2: "val5", f3: "val6" }); 

父母定義哪個字段可以發送給客戶端,例如:

Parents.insert({ name: "p1", allowedFields: [ "name", "f1", "f2" ] }); 
Parents.insert({ name: "p2", allowedFields: [ "name", "f1", "f3" ] }); 

我想發佈/訂閱所有對象,但接收它們的不允許的字段被剝奪。

根據上面的例子中,我希望在客戶端上執行以下操作:

​​

我怎樣纔能有效地做到這一點?

語境:

  • 流星
  • 我通常會有100 parents和1000 objects
  • 我不提前多少人知道parents/objects我都會有,不知道是什麼允許的字段將由每個參考parent

回答

2

執行以下操作...

在服務器上:

Meteor.publish('objects', function(parentName) { 
    var parent = Parents.findOne({'name': parentName}); 
    var allowedFields = {}; 
    for (var i = 0; i < parent.allowedFields; i++) 
     allowedFields[parent.allowedFields[i]] = 1; 
    return Objects.find({ parent: parentId}, { fields: allowedFields }); 
}); 

在客戶端:

Parents.find({}).foreach(function(parent) { 
    Meteor.subscribe('objects', parent.name); 
}); 
0

您可以使用field specifiers來限制從服務器傳遞到客戶端的字段。這應該是最簡單的方法。

例如:

Objects.find({}, 
    {fields: {name:1, f1:1, f2:1}}); 

在這種情況下,字段線允許「名稱」,「F1」,和「F2」字段被傳遞-到客戶端。