Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/462.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 在模板事件中查找文档的正确方法?_Javascript_Meteor - Fatal编程技术网

Javascript 在模板事件中查找文档的正确方法?

Javascript 在模板事件中查找文档的正确方法?,javascript,meteor,Javascript,Meteor,我正在尝试在Template.admin.events代码中查找已完成的文档。我有一个表单,单击一次,我想验证输入的ObjectID的ID是否是我的集合中的现有文档,并获取结果以在模板上显示它 客户端上的我的事件代码: Template.admin.events({ 'click #btnAjouterObjet'(event) { let objetIdInput = $('#object_id').val().toString(); M

我正在尝试在Template.admin.events代码中查找已完成的文档。我有一个表单,单击一次,我想验证输入的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);
                    }
                }
            });
        }
});
在我的Objects api中:

Meteor.publish('objetsFindOne', function objetsFindOne(param_id){
    return Objets.find({_id : param_id});
  })
我已验证,当输入不同的Id时,我的objetIdInput始终会在单击时更改,但subscribe始终返回输入的第一个Id。我还添加了onReady,因为否则它返回未定义


我是Meteor的新手,我也尝试订阅所有的收藏,并在客户机上进行查找,但我认为这不是最好的主意,因为我的收藏大约有22000个文档

你完全搞错了。我建议你看一看

你在这件事上完全错了。我建议您看一看

,就第一个答案详细阐述一下如何改变这种模式:

(1) 您应该将您的
Meteor.subscribe()
调用放入
Template.admin.onCreated()
函数中

(2) 订阅从反应值读取,例如,
new ReactiveVar()

(3) 现在,只要反应值发生变化,订阅就会重新运行。因此,在模板事件中,您将被动值设置为id,并让订阅处理其余内容


“探索流星”和其他资源在任何细节上都会有所帮助。

请详细说明第一个答案,以及如何改变这种模式:

(1) 您应该将您的
Meteor.subscribe()
调用放入
Template.admin.onCreated()
函数中

(2) 订阅从反应值读取,例如,
new ReactiveVar()

(3) 现在,只要反应值发生变化,订阅就会重新运行。因此,在模板事件中,您将被动值设置为id,并让订阅处理其余内容


“发现流星”和其他资源在任何细节上都会有所帮助。

我选择使用以下方法:

客户端:

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

我选择使用一种方法:

客户端:

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

这是一个非常非流星式的方法来处理这个问题,因为你绕过了反应性,@Jeremy s有正确的解决方案。你是对的。直到这个问题出现,我才理解流星中反应性的概念。ReactiveVar是一个不错的选择!这是一个非常非流星式的方法来处理这个问题,因为你绕过了反应性,@Jeremy s有正确的解决方案。你是对的。直到这个问题出现,我才理解流星中反应性的概念。ReactiveVar是一个不错的选择!订阅需要一些时间,但我不知道如何在执行其余代码之前等待它准备就绪。订阅需要一些时间,但我不知道如何在执行其余代码之前等待它准备就绪。