2014-04-01 38 views
0

我试图做一个类别系统,我似乎无法弄清楚如何使其工作。 这里有一个模拟JS和HTML来证明什么即时试图完成结合2集合在1模板Meteor.js

test.js

Categories = new Meteor.Collection('categories'); 
Rooms = new Meteor.Collection('rooms'); 

if (Meteor.isClient) {  
    Template.Category_System.categories = function() { 
     return Categories.find({}); 
    }; 
    Template.Category_System.rooms = function() { 
     return Rooms.find({}); //here i want to return the rooms and users in the Rooms collection but only the rooms that fall under the category and subcategory of the Categories collection 
    }; 
} 

if (Meteor.isServer) { 
    Meteor.startup(function() { 
     Categories.insert({category:"category1",subcategories:[{subcategory:"subcategory1",rooms:[]},{subcategory:"subcategory2",rooms:[]}]}; 
     Categories.insert({category:"category2",subcategories:[{subcategory:"subcategory1",rooms:[]},{subcategory:"subcategory2",rooms:[]}]}; 

     Rooms.insert({category:"category1",subcategory:"subcategory1",room:'Room_01',users:[a,b,c]}); 
     Rooms.insert({category:"category1",subcategory:"subcategory1",room:'Room_02',users:[d,e,f,g,h]}); 
     Rooms.insert({category:"category1",subcategory:"subcategory2",room:'Room_03',users:[i]}); 
     Rooms.insert({category:"category2",subcategory:"subcategory1",room:'Room_01',users:[j,k]}); 
     Rooms.insert({category:"category2",subcategory:"subcategory2",room:'Room_02',users:[l,m,n]}); 
     Rooms.insert({category:"category2",subcategory:"subcategory2",room:'Room_03',users:[o,p,q,r]});    
    }); 
} 

的test.html - >只是模板

<template name="Category_System"> 
    {{#each categories}} 
     {{category}} 
     {{#each subcategories}} 
      {{subcategory}} 
      {{#each rooms}} 
        {{room}}{{users}} 
      {{/each}} 
     {{/each}} 
    {{/each}} 
</template> 

结果我试图实现

category1 
    -subcategory1 
     -Room_01 a,b,c 
     -Room_02 d,e,f,g,h 
    -subcategory2 
     -Room_03 i 
category2 
    -subcategory1 
     -Room_01 j,k 
    -subcategory2 
     -Room_02 l,m,n 
     -Room_03 o,p,q,r 

在此先感谢

回答

0

根据您的模拟代码,你可以这样做以下:

category.js

Categories = new Meteor.Collection('categories'); 
Rooms = new Meteor.Collection('rooms'); 

if (Meteor.isClient) {  
    Template.Category_System.categories = function() { 
     return Categories.find(); 
    }; 
    Template.Category_System.rooms = function (cat) { 
     var _subcat = this.subcategory, 
      _cat = cat; 
     return Rooms.find({ category: _cat, subcategory: _subcat }); 
    }; 
} 

if (Meteor.isServer) { 
    Meteor.startup(function() { 
     if (!Categories.find().count()) { 
      Categories.insert({category:"category1",subcategories:[{subcategory:"subcategory1",rooms:[]},{subcategory:"subcategory2",rooms:[]}]}); 
      Categories.insert({category:"category2",subcategories:[{subcategory:"subcategory1",rooms:[]},{subcategory:"subcategory2",rooms:[]}]}); 
     } 
     if (!Rooms.find().count()) { 
      Rooms.insert({category:"category1",subcategory:"subcategory1",room:'Room_01',users:["a","b","c"]}); 
      Rooms.insert({category:"category1",subcategory:"subcategory1",room:'Room_02',users:["d","e","f","g","h"]}); 
      Rooms.insert({category:"category1",subcategory:"subcategory2",room:'Room_03',users:["i"]}); 
      Rooms.insert({category:"category2",subcategory:"subcategory1",room:'Room_01',users:["j","k"]}); 
      Rooms.insert({category:"category2",subcategory:"subcategory2",room:'Room_02',users:["l","m","n"]}); 
      Rooms.insert({category:"category2",subcategory:"subcategory2",room:'Room_03',users:["o","p","q","r"]}); 
     } 
    }); 
} 

category.html

<head> 
    <title>Category System Test</title> 
</head> 

<body> 
    {{> Category_System}} 
</body> 

<template name="Category_System"> 
    <ul> 
     {{#each categories}} 
     <li> 
      {{category}} 
      <ul> 
       {{#each subcategories}} 
        <li> 
         {{subcategory}} 
         <ul> 
          {{#each rooms ../category }} 
           <li>{{room}} - {{users}}</li> 
          {{/each}} 
         </ul> 
        </li> 
       {{/each}} 
      </ul> 
     </li> 
     {{/each}} 
    </ul> 
</template> 

要注意的关键问题是../categoryrooms的帮助程序中的传递以及的模板帮助程序,它接受类别参数,并使用当前的subcategory数据上下文过滤Room集合。

如果你运行这个流星0.8.0下,你应该看到下面的输出... sample output from code found above

您可以通过在每个Category文档的完成参考rooms阵列使它更容易些。通过用户界面执行此操作,或者捕获每个Room文档的insertId,并在种子时更新相应的Category文档。

顺便说一句,当你播种你的收藏时,你可能会想要抛出一张支票(参见上面的代码)......否则,每当你做出来的时候你都会收到很多很多的记录更改并重新启动应用。

+0

对不起,这么晚回来,这完美的作品。虐待看完成引用,是的,我忘了添加支票感谢指出。再次感谢所有帮助和快速回复 – blaknt