3

我已经成功发布和订阅了两个合集。在客户端,我将 subscribe 方法放入一个自动运行函数中,每次我更改一些会话变量时,我的集合都会更新。我的数据模型如下所示:

Topics: {
    _id: ObjectID,
    comments: [
        commentId1,
        commentId2,
        etc...
    ]
}

Comments: {
    _id: ObjectID,
}

当我创建新评论时,我在集合中插入评论并使用数组上的aComments更新Topics集合。$push在此之后,我预计,meteor 会重新呈现我的页面,但只有当我更改主题会话变量并将其更改回来或手动重新加载页面时才会发生这种情况......只有这样,meteor 才会更新订阅。为什么会这样?我想我错过了一些东西......但文档没有给我任何线索。

4

1 回答 1

0

我想,原因是您在客户端执行数据库插入,但不知道为什么它不再呈现页面。

您可以这样做的另一种方法是,在服务器端使用Meteor.call()as 执行插入:

if (Meteor.isClient){
  ....
  ....
  Meteor.call('addComment', 'your_new_comment'); 
  ....
} 

在服务器端:

if(Meteor.isServer){

  Meteor.Methods({
   'addComment' : function(data){
     //your insertion code here.
     Comments.insert(data);
   }
  });
}

你也可以这样做Topics。这将更新服务器端的相关数据,并且由于您已经拥有published-subscribed这些数据,即使会话变量没有更改,它也会自动发布到客户端。

于 2013-03-04T05:28:18.177 回答