我真的在努力解决这个问题。所以,我有一个服务器端方法,如:
Meteor.methods({
'pushInfo': function(){
if (this.userId) {
userManagement.update({
'_id': this.userId
}, {
$push: {
'activeInfos': ["The Info/Object I want to push from another collection"]
}
}
);
}
}
});
此方法应将对象推送到集合'userManagement'中的字段'activeInfos'。
所以,我点击了一下。触发方法的事件,如:
Template.available.events({
"click. push": function(e) {
e.preventDefault();
Meteor.call('pushInfo');
}
});
现在,我有另一个名为'Infos'的集合,我希望通过该方法将单个对象/ ID推送到字段'activeInfos'。
当我手动用'Infos'集合中的ID填充它时,该方法的效果与预期的一样。它将此ID推送到“activeInfos”,用户现在可以从“Infos”访问此objectID。
但是,当触发该方法时,它应该自动从'Infos'中找到正确的ID并将其推送到'activeInfos'。
有没有办法做到这一点?我正在尝试几个小时,现在我有点绝望了。会感激任何有帮助的。
感谢。
答案 0 :(得分:0)
如果您的available
模板显示Infos
列表,那么您可以在事件处理程序中获取_id
对象的Infos
并将其传递给方法:
Template.available.events({
"click. push"(e) {
e.preventDefault();
Meteor.call('pushInfo',this.InfoId);
}
});
Meteor.methods({
'pushInfo'(infoId)=>{
const info = Infos.findOne(infoId)
if (this.userId && info) {
userManagement.update(this.userId, { $push: { activeInfos: info }});
}
}
});
答案 1 :(得分:0)
知道了!不过,谢谢你的努力!我不知道为什么,但我只需将this.InfoId分配给var并将InfoId放入事件处理程序中的Meteor.call。我能够将这个var传递给服务器端方法中的函数,然后抓住$ push。
Template.available.events({
"click .push": function(e) {
e.preventDefault();
var InfoId = this.InfoId;
Meteor.call('pushInfo', InfoId);
}, });
和
Meteor.methods({
'pushInfo': function(InfoId) {
if (this.userId) {
userManagement.update({
'_id': this.userId
}, {
$push: {
'activeInfos': infoId
}
}
);
}
}
});