Javascript 流星收集未被改造

Javascript 流星收集未被改造,javascript,meteor,Javascript,Meteor,此代码无法将字段“class”的值设置为“ErrorInput”,即使在应该执行块的位置,条件的计算结果为false。 目标是更新字段“类” 编辑了,因此依靠meteor的反应性来更新模板中的表达式{{class}}。如何做到这一点?谢谢 meteor:PRIMARY>db.inputsCol.find({}).pretty(); { “_id”:“L9nrmjaoG6RAdxeqd”, “元素”:“输入”, “行动”:“订购食品”, “名称”:“铭牌”, “占位符”:“输入车牌号”, “有效

此代码无法将字段“class”的值设置为“ErrorInput”,即使在应该执行块的位置,条件的计算结果为false。 目标是更新字段“类”

编辑了,因此依靠meteor的反应性来更新模板中的表达式{{class}}。如何做到这一点?谢谢

meteor:PRIMARY>db.inputsCol.find({}).pretty(); { “_id”:“L9nrmjaoG6RAdxeqd”, “元素”:“输入”, “行动”:“订购食品”, “名称”:“铭牌”, “占位符”:“输入车牌号”, “有效”:“^[0-9a-zA-Z]{1,6}$”, “价值”:“金刚”,
“类”:”在查找/获取后动态应用转换。每当
字段更改时,您都希望修改数据库中的文档。有几种方法可以做到这一点。一种方法是确保在任何代码插入或更新
InputsCol
文档时正确更新它。或者,您可以添加一个类似的示例:


注意:上面的代码未经测试,但其思想是,在插入或更新集合时,文档将自行修改其
字段。您需要
meteor添加matb33:collection挂钩
,以使其工作。

集合转换仅在获取文档时运行。它们不会在数据库。要测试转换,您需要在客户端或服务器上执行以下操作:
console.log(G.InputsCol.findOne('L9nrmjaoG6RAdxeqd').class)
在浏览器控制台中编写此命令会按预期提供输出字符串“errowinput”,但mongo终端不会显示“class”的值字段。此外,代码的其余部分会导致块按照我的编辑中控制台日志的“验证”执行,但行“doc.class=“ErrorInput”不会导致值在mongo控制台验证的文档中“插入”。即使应用程序首次启动时,“块运行”也会触发,但不会触发“错误输入”“字符串已插入。是的,它的行为符合预期。请参阅我上一条注释的第一行。如果希望将其写回数据库,则需要一个钩子。请使用钩子给出这样的答案,好吗?:)ThxThanks。我单独使用了before.update,它将字段类的值更新为“ErrorInput”。反应性行为仍然有效吗?因为模板中使用此值的{class}没有得到更新。thxIt应该是。钩子应该像其他代码修改了该值一样运行。如果它出现在数据库中但没有出现在客户端上,则可能是一个不相关的问题。
G.InputsCol = new Mongo.Collection('inputsCol');

G.InputsCol.before.insert(function (userId, doc) {
  var patt = new RegExp(doc.valid, 'g');
  if (!patt.test(doc.value))
    doc.class = 'wrongInput';
});

G.InputsCol.before.update(function (userId, doc, fieldNames, modifier) {
  if (_.contains(fieldNames, 'value')) {
    var patt = new RegExp(doc.valid, 'g');
    if (!patt.test(doc.value)) {
      modifier.$set = modifier.$set || {};
      modifier.$set.class = 'wrongInput';
    }
  }
});