2016-07-18 4 views
0

Template.admin.eventsコードで1つのドキュメントを検索しようとしています。私はフォームとonClickを持っています。入力されたObjectIDのIDがコレクションの既存のドキュメントであるかどうかを確認し、その結果をフェッチしてテンプレートに表示するかどうかを確認します。テンプレートイベントで1つのドキュメントを見つける適切な方法はありますか?

クライアント上のマイイベントコード:私のオブジェAPIで

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); 
        } 
       } 
      }); 
     } 
}); 

:私は確認していると私のobjetIdInputは常にクリックで変更

Meteor.publish('objetsFindOne', function objetsFindOne(param_id){ 
    return Objets.find({_id : param_id}); 
    }) 

異なるIDが入力されたが、常にサブスクライブしています入力された最初のidを返します。それ以外の場合はundefinedを返すので、onReadyも追加しました。

私はMeteorを初めて使用しています。また、すべてのコレクションを購読してクライアントで検索しようとしましたが、私のコレクションには約22000個のドキュメントがあるとは思わないと思います。

+0

をsubscribtionは多少時間がかかりますが、私は把握することはできませんコードの残りの部分を実行する前に準備が整うのを待つ方法。 –

答えて

2

を見てみお勧め:

(1)あなたはTemplate.admin.onCreated()機能であなたのMeteor.subscribe()電話をかける必要があります。

(2)サブスクリプションは、無効な値(例えば、new ReactiveVar())から読み取ります。

(3)ここで、リアクティブ値が変更されると、いつでもサブスクリプションが再実行されます。したがって、テンプレートイベントでは、リアクティブ値をidに設定し、サブスクリプションで残りの部分を処理させます。

ディスカバー流星やその他のリソースは、詳細に役立ちます。

0

あなたはこれについてすべて間違っています。私はあなたがちょうどこのパターンを変更する方法として、最初の答えに少し詳しく説明しTemplate-Level Subscriptions

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

これは、あなたが反応性を迂回したことでこの問題に近づく非常に非流行的な方法です。@ Jeremy Sは正しい解決策を持っています。 –

+0

あなたは正しいです。私はこの問題が起こるまで、流星における反応性の概念を理解していませんでした。 ReactiveVarは行く方法をdefです! –

関連する問題