此代码未能设置字段的值" 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;
答案 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
才能实现此目的。