使用 Meteor 的发布订阅为 minimongo 对象获取更多字段
Getting more fields for a minimongo object using Meteor's publish-subscribe
我正在构建的应用有一个游戏合集。该集合中的每个对象都有大量与之关联的数据。如此之多,以至于在为每个用户列出游戏时,我必须限制发送给它的字段。这都是常见的东西并且工作正常。当我想获得特定游戏的更多字段时,问题就来了,比如当我转到它的页面时,我需要的不仅仅是描述和名称。
下面是游戏列表的发布,然后是我试图用来更新包含所有字段的文档的发布。
Meteor.publish('games', function() {
return Games.find({owner: this.userId}, {fields: {
name: 1,
description: 1
}});
});
//Publish all the fields for the given game
Meteor.publish('game', function(gameId) {
return Games.find({_id: gameId});
});
我对 Meteor 中发布订阅功能的理解是,第二次发布会更新 Games minimongo 集合,将新字段提供给集合中的对象。
然而我的理解似乎有缺陷,或者我的实现有问题。
当我在列表页面上登录游戏合集console.log(Games)
时,我在那里订阅了'games'发布。我得到了我所期望的,一个包含当前用户拥有的所有游戏的集合。所有文档都只有预期的名称和描述。
当我进入游戏页面时,我在那里订阅 'game'。集合意外更改。当我执行与上面相同的日志时,我得到一个只有一个对象但包含所有字段的集合。这不是我所期望的,但它可以满足我的需要。
问题出在这之后。当我在 minimongo colleciton 上执行客户端 select(下图)时。我得到一个只有描述和名称的对象。
game: () => {
return Games.findOne({_id: $stateParams.gameId});
}
我正在查找一个包含我想要的所有字段的对象的集合,但是 select 返回的对象只有我事先定义的两个字段。
我不知道如何让它工作,我遇到的问题使我对 Meteor 中的发布订阅功能的理解超出了 window。
如果需要,我可以在浏览器控制台中添加一些集合对象的屏幕截图
有什么想法或建议可以尝试吗?
编辑:这是我的 angular 显示订阅的两个要点:
你描述行为的方式对我来说似乎很正常:你订阅了一个包含所有项目的集合,另一方面你订阅了一个子集,所以 Meteor 'magic' 在这里对你不利.
您可以做几件事:
在只有一个游戏的页面上订阅两个订阅:这将防止清除完整列表,因为你没有订阅它,它只会更新一个游戏它的所有字段。
将 Collections 拆分为 Info 和 Generic 选项:我想这对您来说会麻烦很多,但这是一个选项。
执行方法调用以获取一款游戏的信息:有点老套,但应该可以。
我认为您应该尝试第一个选项,看看它对您的效果如何。在任何情况下,如果它是一个需要时间加载的长列表,你应该确保你订阅了完整的集合。
祝你好运。
我正在构建的应用有一个游戏合集。该集合中的每个对象都有大量与之关联的数据。如此之多,以至于在为每个用户列出游戏时,我必须限制发送给它的字段。这都是常见的东西并且工作正常。当我想获得特定游戏的更多字段时,问题就来了,比如当我转到它的页面时,我需要的不仅仅是描述和名称。
下面是游戏列表的发布,然后是我试图用来更新包含所有字段的文档的发布。
Meteor.publish('games', function() {
return Games.find({owner: this.userId}, {fields: {
name: 1,
description: 1
}});
});
//Publish all the fields for the given game
Meteor.publish('game', function(gameId) {
return Games.find({_id: gameId});
});
我对 Meteor 中发布订阅功能的理解是,第二次发布会更新 Games minimongo 集合,将新字段提供给集合中的对象。
然而我的理解似乎有缺陷,或者我的实现有问题。
当我在列表页面上登录游戏合集console.log(Games)
时,我在那里订阅了'games'发布。我得到了我所期望的,一个包含当前用户拥有的所有游戏的集合。所有文档都只有预期的名称和描述。
当我进入游戏页面时,我在那里订阅 'game'。集合意外更改。当我执行与上面相同的日志时,我得到一个只有一个对象但包含所有字段的集合。这不是我所期望的,但它可以满足我的需要。
问题出在这之后。当我在 minimongo colleciton 上执行客户端 select(下图)时。我得到一个只有描述和名称的对象。
game: () => {
return Games.findOne({_id: $stateParams.gameId});
}
我正在查找一个包含我想要的所有字段的对象的集合,但是 select 返回的对象只有我事先定义的两个字段。
我不知道如何让它工作,我遇到的问题使我对 Meteor 中的发布订阅功能的理解超出了 window。
如果需要,我可以在浏览器控制台中添加一些集合对象的屏幕截图
有什么想法或建议可以尝试吗?
编辑:这是我的 angular 显示订阅的两个要点:
你描述行为的方式对我来说似乎很正常:你订阅了一个包含所有项目的集合,另一方面你订阅了一个子集,所以 Meteor 'magic' 在这里对你不利.
您可以做几件事:
在只有一个游戏的页面上订阅两个订阅:这将防止清除完整列表,因为你没有订阅它,它只会更新一个游戏它的所有字段。
将 Collections 拆分为 Info 和 Generic 选项:我想这对您来说会麻烦很多,但这是一个选项。
执行方法调用以获取一款游戏的信息:有点老套,但应该可以。
我认为您应该尝试第一个选项,看看它对您的效果如何。在任何情况下,如果它是一个需要时间加载的长列表,你应该确保你订阅了完整的集合。
祝你好运。