即使条件在块的执行位置处计算为false,此代码仍未能将字段“class”的值设置为“wrongInput”。 目的是更新的字段“类”未被转换的流星汇集
编辑因此中继上流星更新表达式{{类}}在上模板的reactiveness。如何才能做到这一点?感谢
meteor:PRIMARY> db.inputsCol.find({}).pretty();
{
\t "_id" : "L9nrmjaoG6RAdxeqd",
\t "element" : "input",
\t "action" : "orderFood",
\t "name" : "plate",
\t "placeholder" : "Enter plate number",
\t "valid" : "^[0-9a-zA-Z]{1,6}$",
\t "value" : "KingKong",
\t "class" : "" <---- expected value is "wrongInput"
}
G.InputsCol = new Mongo.Collection('inputsCol', {
transform: function (doc) {
var patt = new RegExp(doc.valid, "g");
if (!patt.test(doc.value)) {
console.log('block run');
doc.class = "wrongInput"; <---- This line ---------------------------
}
return doc;
}
});
Template.index.helpers({
taskInputs: function() {
var ready = Meteor.subscribe('inputsCol').ready();
var data = InputsCol.find({});
return {items: data, ready: ready};
}
});
收集转换仅在获取文档时运行。他们不修改数据库中的文档。要测试转换,您需要在客户端或服务器上执行以下操作:'console.log(G.InputsCol.findOne('L9nrmjaoG6RAdxeqd')。class)' –
在浏览器控制台中写入此命令会提供输出如预期的字符串“wrongInput”,但然后mongo终端显示“class”字段没有值。另外,代码的其余部分会导致块被执行,正如我在编辑中由控制台日志“验证”所述,但“doc.class =”wrongInput“行不会导致值被”插入“文档中如在mongo控制台验证的那样,即使应用程序第一次启动时,“块运行”也会触发,但不会插入“wrongInput”字符串 –
是的,它的行为与预期的一样,请参阅我以前的评论的第一行。要写回到数据库,你需要一个钩子代替 –