Meteor Publish-Composite嵌套问题

时间:2016-02-02 22:50:32

标签: meteor meteor-collections

问题: 我有许多组,每个组都有属于不同组的成员。每个成员在每个组中都有一个标题(角色)。 我正在尝试列出所有组并显示组中的每个成员及其标题。 我正在使用reywood:publish-composite,一切正常,但我无法获得每个成员的标题。 我认为问题出在Template.groupMembers.helpers文件

 title: function() {
        console.log(this.roleId); // this shows up in the console for each member
        return Titles.findOne({titleId: this.roleId}); // but this doesn’t work 
      },

类别:

groups {
    "_id" : "xFSzAHBEps2dSKcWM",
    "name" : "Generic Group",
    "logo" : "generic-logo-hi.png"
}


members {
    "_id" : "vyDtiaKKukZYQdFvs",
    "groupId" : "xFSzAHBEps2dSKcWM",
    "memberId" : "hRx8GBTyB5X8iQQ52",
    "roleId" : "1"
}


Meteor.users {
    "_id" : "hRx8GBTyB5X8iQQ52",
    "profile" : {
        "name" : "Bob Lorros"
    },
 }


titles {
    "_id" : "bYsKpsyYtyKR8NYpm",
    "titleId" : 1,
    "title" : "Staff (non-voting)"
}

服务器/出版物/ publications.js

Meteor.publishComposite('groupMembers', {
  find: function() {
      return Groups.find({}, {
        sort: {name: 1}
      });
    },
    children: [
        {
            find: function() {
                return Titles.find();
            },
            find: function(group) {
              return Members.find({groupId: group._id});
            },
            children: [
              {
                find: function(member) {
                    return Meteor.users.find({_id: member.memberId});
                }
              },
            ]
        },
    ]
});

的客户机/模板/测试/ test.js

Template.groupMembers.helpers({
  groupMembers: function() {
    return Groups.find({}, {
      sort: {name: 1}
    });
  },
  members: function() {
    return Members.find({groupId: this._id});
  },
  title: function() {
    console.log(this.roleId); // this shows up in the console for each member
    return Titles.findOne({titleId: this.roleId}); // but this doesn’t work 
  },
  memberName: function() {
    return Meteor.users.findOne(this.memberId);
  },
});

的客户机/模板/测试/的test.html

<template name="groupMembers">
  <h4>Group - Members</h4>
  {{#each groupMembers}}
    <b>{{name}}</b><br>
    {{#each members}}
       &nbsp;{{memberName.profile.name}}
        - title = {{title.title}}
        <br>
    {{/each}}
    <br>
  {{/each}}
</template>

输出: This is the ouput

3 个答案:

答案 0 :(得分:1)

从完全不同的角度来看,我实际上认为你可以使用alanning:角色来完成你正在寻找的东西。您可以将该角色用作&#39;标题&#39;在这种情况下,&#39;组&#39;替换你的团体。这是文档:

https://github.com/alanning/meteor-roles

答案 1 :(得分:1)

不确定,但我认为您的第二个find可能会覆盖您的第一个find: function() { return Titles.find(); }, find: function(group) { return Members.find({groupId: group._id}); }, 。而不是:

find: function() {
  return [
    Titles.find(),
    Members.find({groupId: group._id})
  ];
},

尝试返回游标数组。

Titles

但是,当标题查询是所有标题时,我不明白为什么GroupMembersIf isDelete Then oItemsInDateRange(i).MeetingStatus = olMeetingCanceled oItemsInDateRange(i).Save oItemsInDateRange(i).Display oItemsInDateRange(i).Send oItemsInDateRange(i).Delete i = i - 1 End If 的孩子。你的意思是在那里查询吗?

答案 2 :(得分:0)

我认为你的publishComposite导致了这个问题,children数组中的每个对象应该只有一个@Override public void onResume() { super.onResume(); gridView.setNumColumns(getResources().getInteger(R.integer.num_columns)); gridView.setColumnWidth(getResources().getDimensionPixelSize(R.dimen.gridview_row_item_size)); } @Override public void onConfigurationChanged(Configuration newConfig) { super.onConfigurationChanged(newConfig); gridView.setNumColumns(getResources().getInteger(R.integer.num_columns)); gridView.setColumnWidth(getResources().getDimensionPixelSize(R.dimen.gridview_row_item_size)); } 和零个或多个find。此外,发布中的第二个参数必须是函数,而不是JSON对象。试试这个,

children

您还可以将 Meteor.publishComposite('groupMembers', function () { return { find: function() { return Groups.find({}, { sort: {name: 1} }); }, children: [{ find: function() { return Titles.find(); } }, { find: function(group) { return Members.find({groupId: group._id}); }, children: [{ find: function(member) { return Meteor.users.find({_id: member.memberId}); } }] }] }; }); 移至根级别

来提高效果
Titles.find