以下代码片段给了我错误:
Households.update({
_id: Meteor.user().profile.myHousehold,
"shoppingList.name" : this.name},
{"$set" : {
"shoppingList.$.checked" : checked
}
});
晓得?我正在按 id 更新。作为一种解决方法,我当然可以简单地替换整个阵列shoppingList
,但这将是蛮力。
使用具有延迟补偿的复杂更新/删除选择器的正确模式是使用 Meteor 方法。
共享代码:
Meteor.methods({
setHouseholdChecked: function(shoppingListName, checked) {
check(this.userId, String);
check(shoppingListName, String);
check(checked, Boolean);
Households.update({
_id: Meteor.user().profile.myHousehold,
"shoppingList.name" : shoppingListName
}, {
$set: {
"shoppingList.$.checked" : checked
}
});
}
});
客户端代码:
Meteor.call('setHouseholdChecked', this.name, checked);
对于仅限客户端的解决方案,您可以依靠此技巧:
var households = Houseolds.find({
_id: Meteor.user().profile.myHousehold,
"shoppingList.name" : this.name
});
households.forEach(function(houseold){
Households.update(houseold._id, {
$set: {
"shoppingList.$.checked" : checked
}
});
});