gpt4 book ai didi

javascript - Meteor JS - 添加新帖子时 $sort 不起作用

转载 作者:行者123 更新时间:2023-11-28 01:04:20 25 4
gpt4 key购买 nike

我有一组帖子,每个帖子都有一个 ISO 时间戳(例如:“2014-08-11T16:34:39.334Z”)。我想按时间戳降序对帖子进行排序。

当我第一次加载页面时,一切正常。帖子按时间戳降序排列。

但是,当我添加新帖子时,新帖子会附加到列表的末尾,而不是像它应该那样出现在顶部(因为它的时间戳是最新的)。

我的路由器上有 $sort 设置,可以按时间戳降序“-1”排序。

模板肯定会通过添加新帖子来“使用react”,但顺序不正确。

router.js

this.route('profile',{
path:'/profile',
waitOn:function(){
Session.set('profile',this.params.username);
return Meteor.subscribe('postsByOwner',this.params.username);
},
data:{
user:function(){
var username = Session.get("profile");
var user = Meteor.users.findOne({username:username});
if(user){
return user;
}
},
posts:function(){
return Posts.find({},{$sort:{timestamp:-1}});
}
}
});

profile.html

<template name="profile">
{{#if user}}
{{> profileCard user}}
{{/if}}
{{#if posts.count}}
{{> postsList}}
{{else}}
No posts!
{{/if}}
</template>

methods.js

savePost: function(fields) {
var user = Meteor.user();
if (!user)
throw new Meteor.Error(401, "You need to login to post!");

var d = new Date();
var timestamp = d.toISOString();

var post = _.extend(_.pick(fields, 'title', 'description'), {
owner: user._id,
timestamp : timestamp
});

postId = Posts.insert(post);
}

最佳答案

首先,它是sort,而不是$sort。接下来,排序仅在硬刷新后才起作用这一事实告诉我,您正在将其添加到客户端上的 posts 集合中,然后再通过 Meteor 的 stub 到达服务器。每次添加新帖子时,您可以通过在 Template.profile.onCreated 内的 autorun 函数中重新订阅来避免这种情况。

现在我的意见是:您应该存储 UNIX 时间戳。由于 UNIX 时间戳是自 UNIX 纪元以来的毫秒数,因此对其进行排序是确定的。

如果您使用moment.js,您只需执行moment().valueOf()即可获取当前时间戳:

  var post = _.extend(_.pick(fields, 'title', 'description'), {
owner: user._id,
timestamp : moment().valueOf();
});

如果您想使用普通 JavaScript:

  var post = _.extend(_.pick(fields, 'title', 'description'), {
owner: user._id,
timestamp : new Date().getTime();
});

您可以轻松地将 UNIX 时间戳转换为其他格式,例如

moment(unixTimeStamp).format('YYYY-MM-DD HH:mm:ss');

ref

关于javascript - Meteor JS - 添加新帖子时 $sort 不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25248439/

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