流星集合没有被改造

时间:2016-03-13 04:19:35

标签: javascript meteor

此代码未能设置字段的值" class" to" wrongInput",即使条件评估为false,应该执行块。 目标是更新字段" class"

已编辑,从而转发meteor的反应性,以更新模板中的表达式{{class}}。如何才能做到这一点?感谢



meteor:PRIMARY> db.inputsCol.find({}).pretty();
{
	"_id" : "L9nrmjaoG6RAdxeqd",
	"element" : "input",
	"action" : "orderFood",
	"name" : "plate",
	"placeholder" : "Enter plate number",
	"valid" : "^[0-9a-zA-Z]{1,6}$",
	"value" : "KingKong",
	"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};
  }
});
&#13;
&#13;
&#13;

1 个答案:

答案 0 :(得分:0)

在查找/获取后动态应用转换。您希望在value字段更改时修改数据库中的文档。有几种方法可以做到这一点。一种方法是确保在插入或更新InputsCol文档的任何代码中正确更新。或者,您可以像这样添加hook

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';
    }
  }
});

请注意,上面的代码未经测试,但想法是在插入或更新集合时,文档将自行修改其class字段。您需要meteor add matb33:collection-hooks才能实现此目的。