不能用动态数组id从流星表单更新mongo值
Can't update a mongo value with a dynamic array id from a meteor form
我有一个流星事件,其中我试图从事件处理程序更新一个子文档中的一个值。
我放在一起的字符串是order.0。号码,order.1。数量等。我可以看到在调试器中生成了正确的字符串。我也可以手动更新控制台中的字段,但是代码存根只拒绝更新数字。
事件代码为
'click #closeEdit': function(evt,tmpl) {
evt.preventDefault();
Session.set('showEditEvent',false);
Session.set('lastMod', new Date());
Requests.update({_id:Session.get('editingReqEvent')}, {$set: {locked_by: null}});
var request = Requests.findOne({_id:Session.get('editingReqEvent')});
for (i=1; i <= request.order.length; i++) {
var val=tmpl.find('#'+i).value;
if(!val) {// its null
val = 0
}
var toSet = "order."+(i-1)+".number";
debugger;
Requests.update({_id:Session.get('editingReqEvent')}, {$set: {toSet: parseInt(val)}});
}
},
我应该怎么做这个(显然我这里不是这样做的)。
谢谢。
{toSet: parseInt(val)}
将创建一个键为toSet
的对象。不是你想要的,对吧?您需要执行如下操作:
var toSet = "order."+(i-1)+".number"
var updates = {}
updates[toSet] = parseInt(val)
Requests.update(Session.get('editingReqEvent'), {$set: updates})
PS,在你的代码中,创建i
作为一个局部变量,而不是一个全局变量(猜测你不使用它作为一个全局变量)。DS
{toSet: parseInt(val)}
在这段代码中,toSet
不会计算为order.x.number
,因为它是一个键。更新查询将尝试设置文档中toSet
属性的值。你可以用这样的代码来解决这个问题:
var toSet = {};
var toSet["order."+(i-1)+".number"] = parseInt(val);
Requests.update({_id:Session.get('editingReqEvent')}, {$set: toSet});
相关文章:
- Javascript更新孙窗口中的表单元素
- 如何创建对表单的自我更新响应
- 表单文本框未自动更新
- 如何在ExtJS中用表单更新商店
- 节点.js表单更新有和没有 ajax
- 第三方(随机网站访问者)是否有可能通过 php 表单更新.html索引文件中的某些.js代码
- 使用JS/RRails和下拉表单更新URL查询字符串
- 表单更新“;重置”;按钮以获取新数据
- 通过Django/Python中的自定义表单更新用户数据
- 如何从没有数据库的另一个页面创建用HTML表单更新的页面
- Rails4:通过Ajax进行的表单更新不起作用->模板错误
- 使用jquery中的click()事件从表单更新Highchart
- 通过表单更新JSON
- 从Sencha应用程序中的表单更新服务器上的xml文件
- Gs函数传递'undefined'到jsfunction(动态表单更新)
- 不能用动态数组id从流星表单更新mongo值
- Javascript表单更新点击
- 用HTML表单更新XML
- Javascript刷新发生在子表单更新数据库之前
- Rails动态表单更新