【发布时间】:2020-03-07 03:15:51
【问题描述】:
我在 Meteor 1.8.1 中为文档编写了服务器端分页;在我的主页上,您会看到分页的文档列表。如果单击显示的 10 个文档之一,则导航到该文档的详细信息页面。问题是,如果您随后从详细信息页面单击主页返回到分页列表,则您刚刚查看的文档会出现在页面顶部,而不管其名称如何。例如,如果您查看“B 文档”然后单击主页,则列表为:
B 文档
一份文件 ...
我正在应用客户端排序,但我没有尝试任何方法导致最近查看的文档出现在页面上的正确位置。只有刷新主页才能修复排序以首先显示“A Document”。
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,
'name_sort': 1,
},
},
);
});
下面是我的 React 主页访问数据的方式:
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() 停止单文档订阅,但这并没有解决问题。
【问题讨论】:
标签: reactjs sorting meteor pagination