流星:记录在数据库更新中,但屏幕上的数据没有改变
Meteor: record in db updating, but data not changing on screen
这是我的一个模板中的简化版本:
{{#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 returns 开始时为 false 的布尔会话变量的值。因此,当页面加载时,用户会看到每条记录的 'f' 字段的值和“编辑”按钮。 EDIT 按钮将会话变量翻转为 true,然后使用输入元素显示数据。用户可以编辑数据并单击该按钮,该按钮现在是一个保存按钮。该按钮使用 _id 更新记录并将会话变量翻转回 false。
就编辑数据而言,工作正常 -- 记录肯定会更新。我可以检查控制台中的值并看到它已被更改。但是 table 中显示的数据恢复为原始值。我可以非常短暂地看到该字段中显示的更改,然后它会翻转回来。更奇怪的是,如果我再次单击“编辑”按钮,table 仍然显示旧值。要在该字段中查看更新数据的唯一方法是重新启动应用程序。
当我使用本地 mongo 数据库或链接到 meteor.com 上的数据库时,此问题从未发生过。自从我将我的应用程序移至 modulus.io 后,这种情况才开始发生。有什么想法吗?
更新
虽然我无法弄清楚是什么导致了模板中的反应性更新问题,但在 Ethaan 的帮助下,我能够更好地理解这个问题并找到解决方法,所以我接受了这个答案,希望我们会最终水落石出。
你似乎有一些 allow/deny
问题?
试试
Collection.allow({
insert:function(){return true;},
remove:function(){return true;},
update:function(){return true;},
})
或者检查与数据库的连接是否成功,去admin panel on modulus
选项 2
清理数据库并在服务器端进行虚拟插入。
先上流星shell运行meteor reset
.
或 如果您的应用程序在 modulus.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")
}
})
}
})
这是我的一个模板中的简化版本:
{{#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 returns 开始时为 false 的布尔会话变量的值。因此,当页面加载时,用户会看到每条记录的 'f' 字段的值和“编辑”按钮。 EDIT 按钮将会话变量翻转为 true,然后使用输入元素显示数据。用户可以编辑数据并单击该按钮,该按钮现在是一个保存按钮。该按钮使用 _id 更新记录并将会话变量翻转回 false。
就编辑数据而言,工作正常 -- 记录肯定会更新。我可以检查控制台中的值并看到它已被更改。但是 table 中显示的数据恢复为原始值。我可以非常短暂地看到该字段中显示的更改,然后它会翻转回来。更奇怪的是,如果我再次单击“编辑”按钮,table 仍然显示旧值。要在该字段中查看更新数据的唯一方法是重新启动应用程序。
当我使用本地 mongo 数据库或链接到 meteor.com 上的数据库时,此问题从未发生过。自从我将我的应用程序移至 modulus.io 后,这种情况才开始发生。有什么想法吗?
更新 虽然我无法弄清楚是什么导致了模板中的反应性更新问题,但在 Ethaan 的帮助下,我能够更好地理解这个问题并找到解决方法,所以我接受了这个答案,希望我们会最终水落石出。
你似乎有一些 allow/deny
问题?
试试
Collection.allow({
insert:function(){return true;},
remove:function(){return true;},
update:function(){return true;},
})
或者检查与数据库的连接是否成功,去admin panel on modulus
选项 2
清理数据库并在服务器端进行虚拟插入。
先上流星shell运行meteor reset
.
或 如果您的应用程序在 modulus.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")
}
})
}
})