我已经用Meteor 1.8.1编写了服务器端分页文档。在我的主页上,您可以看到分页的文档列表。如果单击显示的10个文档之一,则导航到该文档的详细信息页面。问题是,如果您随后从详细信息页面单击“主页”以返回到分页列表,则无论其名称如何,您刚刚查看的文档都会显示在页面顶部。例如,如果您查看“ B文档”,然后单击“主页”,则列表为:
B文档
文件 ...
我正在应用客户端排序,但是我尝试过的任何操作都不会导致最近查看的文档出现在页面上的正确位置。仅刷新主页会修复排序,使其首先显示“文档”。
name_sort是我为不区分大小写的排序添加的字段,在创建文档时会以name.toLowerCase()
的形式生成。
这是我的publish.js:
Meteor.publish('documents',(skip = 0,limit = 10) => {
return Documents.find({},{
'fields': {
'name': 1,'name_sort': 1,},'sort': { 'name_sort': 1 },'skip': skip,'limit': limit,});
});
Meteor.publish('document',function (_id = undefined) {
return Documents.find(
{ _id },{
'fields': {
'name': 1,);
});
这是我的React Home页面访问数据的方式:
const Tracker = withTracker(({ pageSkip,dispatch }) => {
dispatch(setIsLoading(true));
Meteor.subscribe('documents',pageSkip,10,{
'onready': () => {
dispatch(getDocumentCount());
dispatch(setIsLoading(false));
},});
return {
''documents:': Documents.find({},{
'sort': { 'name_sort': 1 },'limit': 10,}).fetch(),};
})(Home);
有什么主意我可以解决这个问题吗?它一定很简单,但我无法弄清楚。谢谢!
更新:我已经完成了排序工作-我忘记了发布name_sort字段-但是仍然存在一个问题,我详细查看的文档出现在主页列表的顶部,然后然后,它消失还是跳到正确的位置,具体取决于它是否应出现在此页面上。我猜想这一定是因为该文档以前仍在MiniMongo中,并且仅在新订阅准备就绪时才更正列表。如果出现任何类型的服务器延迟,这看起来都非常糟糕。
我想做的是在加载主页时清除MiniMongo,但我找不到解决方法?我尝试使用this.stop()
停止单文档订阅,但这并不能解决问题。