【问题标题】:Meteor: record in db updating, but data not changing on screenMeteor:记录在数据库更新,但屏幕上的数据没有改变
【发布时间】:2015-04-01 15:02:54
【问题描述】:

这是我在其中一个模板中的简化版本:

{{#each dataRecord}}

{{#if editingNow}}

  <tr class="dataRow">
    <td><button class="updateRecord" id="{{this._id}}">SAV</button></td>
    <td><input type="text" id="{{this._id}}" value="{{this.f}}"></td></td>
  </tr>

  {{else}}

  <tr class="dataRow">
    <td><button class="edit" id="{{this._id}}">EDIT</button></td>
    <td>{{this.f}}</td> 
    <td><button class="deleteRecord" id="{{this._id}}">DEL</button> </td>
  </tr>

{{/if}}

{{/each}}

editingNow 返回布尔会话变量的值,该变量以 false 开头。因此,当页面加载时,用户会看到每条记录的“f”字段的值和“编辑”按钮。 EDIT 按钮将会话变量翻转为 true,然后使用输入元素显示数据。用户可以编辑数据并单击该按钮,该按钮现在是一个“保存”按钮。该按钮使用 _id 更新记录并将会话变量翻转回 false。

就编辑数据而言,这项工作是可行的——记录肯定会得到更新。我可以检查控制台中的值并查看它是否已更改。但是表中显示的数据会恢复为原始值。我可以非常短暂地看到该字段中显示的更改,然后它会翻转回来。更奇怪的是,如果我再次单击 EDIT 按钮,表格仍会显示旧值。在该字段中查看更新数据的唯一方法是重新启动应用程序。

当我使用本地 mongo 数据库或链接到meteor.com 上的数据库时,从未出现此问题。自从我将我的应用程序移至modules.io 后,这种情况才开始发生。有什么想法吗?

更新 虽然我不知道是什么导致了模板中的反应更新问题,但在 Ethaan 的帮助下,我能够更好地理解这个问题并找到解决方法,所以我接受了答案,希望我们会最终查明真相。

【问题讨论】:

  • 去找你project &gt; logs 看看你是否得到了一些日志。

标签: mongodb meteor modulus.io


【解决方案1】:

您似乎有一些allow/deny 问题?

试试

Collection.allow({
 insert:function(){return true;},
 remove:function(){return true;},
 update:function(){return true;},
})

或者检查与数据库的连接是否成功,去admin panel on modulus

选项 2

清理数据库并在服务器端进行虚拟插入。

首先在流星外壳上运行meteor reset

如果您的应用程序在 modules.io 上,请使用 mongo shell,并使用这段代码。

db.getCollectionNames().forEach(function(name) {
  if (name.indexOf('system.') === -1) {
    db.getCollection(name).drop();
  }
})

现在,当您确定数据库为空时,将其放在服务器端。

//Server Code.
    Meteor.startup(function(){
      if(Collection.find().count() == 0){
        Collection.insert({serverInsert:"test from server"},function(err,result){
         if(!err){
          console.log("insert succefull")
        }
     })
    }
  })

【讨论】:

  • 此时,我还在使用不安全的包,所以应该不会出现允许/拒绝、错误的可能性,对吗?对不起,我应该提到这一点。而且我不确定我是否理解清空数据库并尝试从服务器插入的原因。对记录的更新肯定正在发生并且是正确的,但是反应模板没有显示更改,正如我所说,这是以前从未发生过的。看完这个答案,我在服务器上添加了一个方法来做更新,这个方法也可以,但是模板仍然显示旧值。
  • 如果您在控制台上看到数据更新但在模板上没有更新,这个助手dataRecord返回正确的数据库光标?
  • 这很奇怪。在更新记录的服务器方法中,我检查结果值以查看更新了多少字段。结果每次都是 1,应该是这样。但是,当我在浏览器控制台中对该 ID 执行 collection.find() 时,记录不会更新。所以这就像出版物停止工作?我的 mini-mongo db 从来没有得到更新?什么可能导致这种情况?
  • 这只发生在modules.io应用程序上?我可以看到应用程序吗?给我链接,并检查本地应用程序上是否也发生这种情况,检查您是否有不安全的软件包以及一切正常,我认为该出版物不会像那样停止工作,您有错字或其他问题跨度>
  • 您的问题和想法帮助我发现部署的版本没有这个问题。问题出在我的本地应用程序连接到模数托管的 mongo db 时。当它连接到我的本地 mongodb 或meteor.com 上的那个时,我没有问题。我在模数上使用的共享 mongodb 实例不允许使用 oplog 拖尾。会是这样吗?如果是这样,我仍然不明白为什么部署的版本有效。所以这对我来说是一个好的解决方法,但如果你想查看它,我可以将你引导到应用程序的 github 源。再次感谢。
猜你喜欢
  • 1970-01-01
  • 2018-02-04
  • 1970-01-01
  • 2021-08-15
  • 1970-01-01
  • 2022-01-25
  • 2013-03-06
  • 2016-01-15
  • 1970-01-01
相关资源
最近更新 更多