gpt4 book ai didi

javascript - Meteor 中的复合集合

转载 作者:行者123 更新时间:2023-11-28 06:28:09 25 4
gpt4 key购买 nike

我正在使用this tutorial为了构建我自己的 ionic / meteor /Angular 应用程序,我达到了删除自动发布和不安全的程度,并开始发布和订阅我的数据。现在我正在努力解决以下问题:

我的 Meteor 应用程序中有两个 Mongo 集合,位于 lib/collections.js 中:

Players = new Mongo.Collection('players');
Teams = new Mongo.Collection('teams');

一个球员有一个 _id 和一个 name,一个球队有一个 _id 和一个由两个(不再)球员组成的数组:["someplayerId","someotherPlayerId"]

在服务器上,我当前有包含以下内容的出版物 server/publications.js:

Meteor.publish('players', function () {
return Players.find({});
});
Meteor.publish('teams', function() {
return Teams.find({}, {transform: function(doc) {
var playerOne = Players.findOne({ _id: doc.players[0]._id });
var playerTwo = Players.findOne({ _id: doc.players[1]._id });

doc.playerOne = playerOne;
doc.playerTwo = playerTwo;

return doc;
}
});
});

在我的 client/routes.js 中,我将我的某个州订阅了这些出版物,以便我可以在客户端代码中使用它们:

.state('tab.settings', {
url: '/settings',
views: {
'tab-settings': {
templateUrl: 'client/templates/settings.html',
controller: 'SettingsCtrl as settings',
resolve: {
teams() {
return Meteor.subscribe('teams');
},
players() {
return Meteor.subscribe('players');
}
}
}
}
});

现在我想在我的代码中使用团队,但无论我做什么,我似乎都忽略了获取这些复合数据的意义。

这会返回错误,因为变量playerOne和playerTwo未定义:

  this.helpers({
players: () => {
return Players.find({});
},
teams: () => {
return Teams.find({}, {transform: function(doc) {
var playerOne = Players.findOne({ _id: doc.players[0] });
var playerTwo = Players.findOne({ _id: doc.players[1] });

doc.playerOne = playerOne.name;
doc.playerTwo = playerTwo.name;

return doc;
}
});
}
});

在我的模板'client/templates/settings.html'中的某个地方,我想使用团队,其中包含转换后的文档。如何做到这一点?

最佳答案

您的订阅很可能尚未准备好。相反,我建议您使用模板级代码来渲染团队,然后渲染该团队中的每个玩家。所以在您的出版物中:

Meteor.publish('teams', function () {
return Teams.find({}, {
transform: function (team) {

// this will give you access to all the players on this team.
team.players = Players.find({
_id: { $in: team.players }
}).map(player => player.name);

return team;
}
});
});

现在文档将如下所示:

{
_id: '1234',
players: ['Jeff', 'Tim', 'Steve']
}

然后在您的模板中,您可以执行以下操作。

{{#if Template.subscriptionsReady}}
{{#each teams}}
// now since the team has a player array, you can use that.
{{#each players}}
{{this}}
{{/each}}
{{/each}}
{{/if}}

关于javascript - Meteor 中的复合集合,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34944350/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com