我有一个流星事件,其中我试图从事件处理程序更新一个子文档中的一个值。
我放在一起的字符串是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});