2016-05-25 3 views
0

私はMeteor(そしてこの点についてはJSスタックの完全なスタック)を初めて使い、Django/PythonのGoogle App Engineで現在実行しているアプリケーションの変換を少し試してみます。Iron Routerルーティングエントリのデータ検索機能を2回実行

I以下のルートエントリがIron Routerを使用してあります。

this.route("editFacility", { 
    path: "/facilities/:_id/edit", 
    template: "editFacility", 
    data: function() { 
    return Facilities.findOne({ _id: this.params._id }); 
    } 
}); 

...と次のテンプレート(オートフォームのQuickFormの使用):

{{#linkTo route='editFacility' _id=this._id class="btn btn-default btn-xs"}}Edit{{/linkTo}} 
:ルートはによってトリガされます

<template name="editFacility"> 
    <h2>Edit facility "{{description}}"</h2> 
    <div class="row"> 
    <div class="col-md-12"> 
     {{> quickForm 
     collection="Facilities" 
     omitFields="createdAt, updatedAt" 
     doc=this 
     id="updateFacilityForm" 
     type="update" 
     template="bootstrap3-horizontal" 
     label-class="col-sm-2" 
     input-col-class="col-sm-6"}} 
    </div> 
    </div> 
</template> 

最初はフォームにデータが入力されていないように見えましたが、ルートのdata:関数のdebuggerステートメントは、この関数が実際に2回実行されたことを示しました。最初に文書を見つけ、フォームを正しく記入してください。すぐに2回目が続き、フォームがクリアされています。スタックは、任意の詳細を明らかにし、両方の実行のために同じに見えるしません:

enter image description here

私は問題をGoogleで検索し、いくつかの言及はなく、透明な溶液となしを発見しました。 meteorとすべてのパッケージが最新の&に更新されましたが、この問題は解決しません。

私の質問では、meteor/Iron Routerにこのルートエントリを2回実行させる原因は何ですか?

+1

流星の反応度についてお読みください。 'findOne'呼び出しは反応的なので、コレクション内のデータが変更されたときに再実行されます。なぜデータがコレクション内で消えてしまうのか分かりません(通常、これはもう一方の方法です、最初は空ではありません)。しかし、これは間違いなくリアクティブな再現と思われます。 –

+0

はい、通常は逆です。フォームデータを入力する適切なサブスクリプションがありますか? –

+0

@ChristianFritz私は反応性について読んだ。コレクションの最初の成功した発見以外の変更はありません(それが "変更"の条件を満たす場合)。 2番目のfindは、同一のコンテキストとドキュメントIDで失敗し、フォームを空白にします。私は困惑しています... – Roger

答えて

1

あなたのパッケージリストからパッケージautopublishが見つからないようです。これは、サーバーで使用可能なすべてのデータを公開する役割を果たします。それ以外の場合は、パブリケーションを作成してからクライアントにサブスクライブする必要があります。

関連する問題