簡體   English   中英

在1個模板Meteor.js中合並2個集合

[英]Combining 2 Collection in 1 Template Meteor.js

我正在嘗試創建一個類別系統,我似乎無法弄清楚如何使其工作。 這是一個模擬js和html,以演示即時嘗試完成的任務

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

提前致謝

根據您的模擬代碼,您可以執行以下操作:

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>

需要注意的關鍵問題是逝世../category塊中的幫手rooms和模板輔助rooms ,其接受類參數以及還利用當前的subcategory的數據上下文來過濾室集合。

如果在Meteor 0.8.0下運行此程序,則應看到以下輸出... 上面代碼中的示例輸出

您可以通過在每個Category文檔中完成對rooms數組的引用來簡化此操作。 您可以通過用戶界面執行此操作,也可以為每個“ Room文檔捕獲insertId並在播種時更新相應的“ Category文檔。

順便說一句,您可能希望在為集合添加種子時進行檢查(請參見上面的代碼)...否則,每次進行更改時,您都會得到很多記錄,並且應用重新啟動。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM