基于不同的会话值发布/订阅同一集合
Publishing/Subscribing same collection based on different Session value
我想基于不同的路由发布和订阅同一集合的子集。这是我的
在/server/publish.js 中
Meteor.publish("questions", function() {
return Questions.find({});
});
Meteor.publish("questionSummaryByUser", function(userId) {
var q = Questions.find({userId : userId});
return q;
});
In/client/main.js
Deps.autorun(function() {
Meteor.subscribe("questions");
});
Deps.autorun(function () {
Meteor.subscribe("questionSummaryByUser", Session.get("selectedUserId"));
});
我正在使用路由器包(https://github.com/tmeasday/meteor-router)。我希望应用程序工作的方式是,当我进入"/questions"时,我想列出所有用户的所有问题,当我访问"/users/:user_id/tquestions",我想只列出特定用户的问题。为此,我设置了"/users/:user_id/questions"路由,以在"selectedUserId"会话中设置userid(我也在"questionSummaryByUser"发布方法中使用该方法。
然而,当我在"/users/:user_id/aquestions"中看到问题列表时,我得到了所有的问题,而与user_id无关。
我在这里读到集合在客户端进行合并,但仍然无法为上述场景找到解决方案。
注意,我刚开始用流星,所以不知道它的来龙去脉。
提前谢谢。
好的做法是在使用收集数据的地方过滤收集数据,而不是依赖于通过订阅获得的子集。这样,即使在向同一集合添加更多订阅时,也可以确保您获得的数据与您想要显示的数据相同。想象一下,如果稍后您想显示一个侧边栏,其中包含来自所有用户的前10个问题。然后,您还必须获取这些数据,如果您在显示所有订阅的数据时有一个位置,那么每个函数都会一团糟。
因此,在要显示用户问题的模板中,执行
Template.mine.questions = function() {
return Questions.find({userId: Meteor.userId()});
};
那么您甚至不需要单独的questionSummaryByUser
通道。
要筛选订阅中的数据,您有几个选项。无论您选择哪一个,请记住订阅是而不是您选择要显示的数据的位置。应始终按照上述方式进行过滤。
选项1
将所有内容保持在一个参数化通道中。
Meteor.publish('questions', function(options) {
if(options.filterByUser) {
return Questions.find({userId: options.userId});
} else {
return Questions.find({});
}
});
选项2
使所有通道仅在需要时返回数据。
Meteor.publish('allQuestions', function(necessary) {
if(!necessary) return [];
return Questions.find({});
});
Meteor.publish('questionSummaryByUser', function(userId) {
return Questions.find({userId : userId});
});
选项3
手动关闭客户端中的订阅。在这种情况下,这可能有些过头了,需要一些不必要的工作。
var allQuestionsHandle = Meteor.subscribe('allQuestions');
...
allQuestionsHandle.stop();
- 2个backbone.js集合,具有相同的模型,但排序顺序不同
- 如何将返回的值应用于多个不同位置的多个选择器
- 如何合并不同集合的游标并按日期排序
- 我未保存的更改指令需要适用于具有不同名称的所有表单
- 如果使用jQuery验证器插件找到单选按钮,则将不同的addMethod应用于字段
- “add”函数适用于不同的链接/参数组合
- 适用于不同设备的响应式画布
- 不同的 CSS 适用于不同的屏幕尺寸
- 将ajax数据返回到对应于不同链接的不同函数
- 在 Backbone 中使用相同类型的集合获取不同的模型集
- 自动点击按钮存在于不同的网页在javascript
- 如果图像文件存在于不同的驱动器中,如何在js/Jquery中给出图像路径
- Do window.postMessage()适用于不同服务器上的不同应用程序
- 如何在不重写现有代码的情况下将jquery代码应用于不同的目标
- SVG-三角函数,用于获得依赖于不同角度的点
- knockoutjs无法将绑定应用于不同的id
- backbone.js:视图中影响集合中不同模型的按钮
- 视图中集合的不同方法
- 当测试存在于不同的文件中时,如何在jasmine中分组测试套件
- 在 xhtml 中为正文元素设置背景图像(适用于不同的显示器和分辨率)