私は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回目が続き、フォームがクリアされています。スタックは、任意の詳細を明らかにし、両方の実行のために同じに見えるしません:
私は問題をGoogleで検索し、いくつかの言及はなく、透明な溶液となしを発見しました。 meteor
とすべてのパッケージが最新の&に更新されましたが、この問題は解決しません。
私の質問では、meteor
/Iron Router
にこのルートエントリを2回実行させる原因は何ですか?
流星の反応度についてお読みください。 'findOne'呼び出しは反応的なので、コレクション内のデータが変更されたときに再実行されます。なぜデータがコレクション内で消えてしまうのか分かりません(通常、これはもう一方の方法です、最初は空ではありません)。しかし、これは間違いなくリアクティブな再現と思われます。 –
はい、通常は逆です。フォームデータを入力する適切なサブスクリプションがありますか? –
@ChristianFritz私は反応性について読んだ。コレクションの最初の成功した発見以外の変更はありません(それが "変更"の条件を満たす場合)。 2番目のfindは、同一のコンテキストとドキュメントIDで失敗し、フォームを空白にします。私は困惑しています... – Roger