小编mas*_*lli的帖子

如何在更改配置文件字段时等待Meteor.users

我正在使用Meteor.users系统定义集合中的配置文件字段来存储有关用户在每个通信通道上读取的最后一条消息的信息,其结构如下:

profile : {
    lastMsgRead : [
        {channelId: 'YYEBNEI7894K', messageCreatedAt: '14578970667"}
        {channelId: 'GERYUE789774', messageCreatedAt: '14578999845"}
    ]
}
Run Code Online (Sandbox Code Playgroud)

我发现读取lastMsgRead字段失败是因为在客户端上数组在读取时仍然为空.我正确地通过以下方式将此字段发布给客户:

Meteor.publish(null, function() {
    return Meteor.users.find({}, {fields: {_id: 1, username: 1, emails: 1, profile :1}});
Run Code Online (Sandbox Code Playgroud)

我以这种方式从lib目录中的客户端库中读取它的值:

var chHistory = Meteor.user().profile.lastMsgRead;
Run Code Online (Sandbox Code Playgroud)

调试我的代码看起来我对配置文件字段所做的更改在我读取它时没有传播到所有客户端.所以我需要等待订阅Meteor.users准备好,但我没有它的处理──你从框架中自动获得这个.

我怎么能等待Meteor.users订阅准备好了?

subscriptions meteor

6
推荐指数
1
解决办法
2683
查看次数

在Meteor中组织我的订阅的最佳模式,没有发现数据未准备好的风险

我在这里阅读了一些关于如何在Meteorjs中组织订阅的帖子,但我仍然不明白什么是最好的模式,以避免发现我订阅的一些数据尚未准备好在模板中使用.我使用Iron Router,现在我在Router.configure中使用waitOn选项组织了所有订阅.我发现这种方式有时无济于事.如果我有多个这样的订阅:

Router.configure({
    layoutTemplate: 'layout',
    loadingTemplate: 'loading',
    waitOn: function () {
        return [
            Meteor.subscribe('channels'),
            Meteor.subscribe('invitations'),
            Meteor.subscribe('messages')
        ];
    } 
});
Run Code Online (Sandbox Code Playgroud)

我明白这个命令很重要.如果我更改数组中订阅的顺序,程序的响应会有所不同.我想要的是在浏览应用程序之前,所有订阅都已完全加载.上一篇文章中的某个人谈到将它们放在一个单独的文件中来解决这个问题.但是怎么样?我需要在哪里放置该文件?对于我的案例,我将在此感谢一些例子.

subscriptions meteor iron-router

4
推荐指数
1
解决办法
903
查看次数

标签 统计

meteor ×2

subscriptions ×2

iron-router ×1