gpt4 book ai didi

javascript - 如何刷新 Meteor.Router 订阅的数据?

转载 作者:行者123 更新时间:2023-12-02 16:29:16 26 4
gpt4 key购买 nike

我一直在使用 Meteor.js 制作一个简单的博客网站。在索引中,页面显示最近的帖子,并且可以按标签和类别重新排列列表。 (当然)每个帖子都有单独的页面。

刷新索引时,列表排序良好,按publishedAt排序。当我尝试按标签或类别排列帖子时,甚至当我去看单个帖子时,这都很好。但是,当我返回索引时,最后获取的帖子(或后一种情况下的帖子)始终位于列表的顶部,未按 publishedAt 正确排序。

例如,假设我们有 4-3-2-1 列表。通过对它们进行排序,我有 3-2。当我返回索引时,现在列表变为 3-2-4-1。

当我从 client.jsconsole.log() 时,首先记录最后获取的帖子,然后记录其他帖子(包括已记录的帖子)。如何在不受之前获取的数据影响的情况下获取帖子?

client.js

Posts = new Mongo.Collection("posts");

Router.route('/', {
name: 'index',
template: 'index',
layoutTemplate: 'ApplicationLayout',
waitOn: function() {
return Meteor.subscribe('recentPosts');
},
data: function() {
return {
posts: Posts.find()
};
}
});

Router.route('/category/:_category', {
name: 'category',
template: 'category',
layoutTemplate: 'ApplicationLayout',
waitOn: function() {
return Meteor.subscribe('categorizedPosts', this.params._category);
},
data: function() {
return {
posts: Posts.find(),
category: this.params._category
};
}
});

服务器.js

Posts = new Mongo.Collection("posts");

Meteor.publish('recentPosts', function() {
return Posts.find({}, {
sort: {publishedAt: -1},
fields: postListFields
});
});

Meteor.publish('categorizedPosts', function(category) {
return Posts.find({
$or: [{category: {$regex: category}}]}, {
sort: {publishedAt: -1},
fields: postListFields
});
});

最佳答案

本地存储数据的顺序与服务器提供给您的文档的顺序无关(正如您所发现的)。另请考虑这样一种情况:具有不同排序顺序的多个出版物被发送到一个本地集合 - 如何处理?

在客户端代码的数据上下文中,您需要为 find() 方法指定排序顺序。这将使用 MiniMongo 对本地存储的帖子进行排序。它不会引起新的服务器请求,只有 subscribe 方法才会这样做。

您可能想知道在服务器上排序有什么意义?举个例子,如果您限制发送给客户端的帖子数量,那么服务器首先对它们进行排序非常重要,以便发送正确的帖子(例如按日期排序的前 10 个帖子) DDP 链接。

这样做的结果是您经常需要在服务器和客户端上复制 find() 方法的排序顺序。您可能希望尝试使用一些通用代码或变量以确保它们同步。

关于javascript - 如何刷新 Meteor.Router 订阅的数据?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28450293/

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