大家好我在我的项目中使用Collection2我希望得到一个字段的长度类型:来自另一个字段的数组
这是我的代码示例
yes: {
type: Array,
optional: true
},
"yes.$": {
type: Object
},
yesLength: {
type: Number,
autoValue: function(){
var lenYes = this.field("yes").length;
console.log(this.field("yes"));
console.log(lenYes)
return lenYes;
},
optional: false
},
当我将this.field(“是”)记录到控制台时,它看起来很好,但是当我记录lenYes,即this.field(“是”)。长度时,我得到了未定义。我在这里做错了吗?感谢
答案 0 :(得分:0)
在Collection2中,如果其他字段在修饰符中为$set
,则只能获取其值。通常情况并非如此,在这种情况下,您需要实际.findOne()
来获取文档,然后从中获取当前值。
您可以将Collection2视为更改的验证程序,但它不是当前值的验证程序。
由于yesLength
应该表示数组的长度,并且数组的长度可以通过修饰符以多种不可预测的方式更改,因此使用collection hook进行计算可能更有意义更新后的yesLength
。
MyCollection.after.insert(function(userId,doc){
if ( doc.yes ){ // the yes array exists
MyCollection.direct.update(doc._id,{ $set: { yesLength: doc.yes.length }});
}
});
MyCollection.after.update(function(userId,doc,fieldNames){
if ( fieldNames.indexOf('yes') > -1 ) { // yes array was modified
MyCollection.direct.update(doc._id,{ $set: { yesLength: doc.yes.length }});
}
});
您需要使用.direct
以避免在更新计数器时重新输入挂钩。