在Template Event中找到一个文件的正确方法?

时间:2016-07-18 14:40:33

标签: javascript meteor

我正在尝试在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个文件。

3 个答案:

答案 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();
    },
});