我正在尝试在Template.admin.events代码中找到一个文档。我有一个表单和onClick我想验证输入的ObjectID的ID是否是我的集合中的现有文档,并获取该结果以在模板上显示它。
客户端上的我的事件代码:
Template.admin.events({
'click #btnAjouterObjet'(event) {
let objetIdInput = $('#object_id').val().toString();
Meteor.subscribe('objetsFindOne', objetIdInput, {
onReady: function () {
let obj = Objets.findOne();
if (obj) {
console.log("found");
console.log(obj);
objetsArr.push(objetIdInput);
}
else {
console.log("not found");
console.log(obj);
}
}
});
}
});
在我的Objets api中:
Meteor.publish('objetsFindOne', function objetsFindOne(param_id){
return Objets.find({_id : param_id});
})
我已经验证并且当输入了不同的ID时,我的objetIdInput始终会在点击时更改,但订阅始终会返回输入的第一个ID。我还添加了onReady,否则返回undefined。
我是Meteor的新手,我也尝试订阅所有的收藏品并在客户端上进行查找,但我不认为这是最好的主意,因为我的收藏品有大约22000个文件。
答案 0 :(得分:2)
关于第一个答案的详细说明,关于如何改变这种模式:
(1)您应将Meteor.subscribe()
来电置于Template.admin.onCreated()
功能。
(2)订阅从无效值读取,例如new ReactiveVar()
。
(3)现在,只要被动值发生变化,订阅就会重新运行。因此,在模板事件中,将无效值设置为id,让订阅处理其余的。
发现Meteor和其他资源应该对任何细节都有帮助。
答案 1 :(得分:0)
你说这一切都错了。我建议你看看Template-Level Subscriptions
答案 2 :(得分:0)
我选择使用方法:
客户方:
'click #btnAjouterObjet'(event) {
let objetIdInput = $('#object_id').val().toString();
let result = Meteor.call('findObj', objetIdInput, function (error, result) {
if (error) {
console.log(error.reason);
return;
}
console.log(result);
});
}
在服务器端:
Meteor.methods({
findObj: function (param_id) {
console.log(Objets.find({ _id: param_id }).fetch());
return Objets.find({ _id: param_id }).fetch();
},
});