【问题标题】:meteor: no page updates after updating collection流星:更新集合后没有页面更新
【发布时间】:2013-03-04 03:48:12
【问题描述】:

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

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

Comments: {
    _id: ObjectID,
}

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

【问题讨论】:

  • 您的数据库中是否有大量数据?您可能应该尝试meteor reset 一次。但这会清除数据。
  • 我还不能测试这个。但是您在哪里看到问题?
  • @Prashant 好的,我已重置数据库并切换回流星主分支,但没有任何反应。页面仅在更改会话变量时刷新。
  • 你能把相关代码放在gist上吗?
  • 我误解了文档:我认为,每次更改集合后,订阅都会更新。我的示例中的代码有效。只有我更复杂的主应用程序中的模板,具有几乎相同的代码 - 除了会话变量,还不能工作。所以问题一定出在其他地方。

标签: meteor publish-subscribe


【解决方案1】:

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

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

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 这些数据,它将自动发布到客户端,即使会话变量没有更改。

【讨论】:

  • 感谢您的回答。我在服务器上进行所有插入和更新(根据Meteor.call),并在Meteor.publish 中进行选择。我认为,无论如何,这就是原因。因为在我的第一个流星应用程序中,我在客户端执行了所有 db 并将所有文档发布到客户端 - 我对 db 更改没有太多麻烦。但我认为,我后来的方法(也是你的答案)更像是流星方式
猜你喜欢
  • 2013-04-06
  • 2016-08-08
  • 2016-06-15
  • 1970-01-01
  • 1970-01-01
  • 2014-11-29
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多