2016-09-02 9 views
0

ユーザーデータを編集できるページがあります。私はルーティングのためにFlowRouterを使用していて、ルート/employees/:idにあります。レコード編集ページのデータを取得する

サーバー上のデータが変更されたときに詳細フォームを更新し、他のクライアントによって削除された場合はルートを残す必要があります。

私はTracker.autorunを使用して、データが変更されるたびに通知します。以前のユーザー情報はテンプレートに保存されるので、レコードが削除されたかどうかを簡単に確認できます。私は、テンプレートがレンダリングされるので、値が正しく設定されませんでした前に、そうではないことは、データが利用可能であることにつながる可能性があると考えているように、データをテンプレートに設定された場合、私はチェックしてるonRenderedコールバックで

Template.UpdateEmployee.onCreated(function() { 
    const self = this; 
    self.subscribe('user', FlowRouter.getParam('id')); 

    self.autorun(function() { 
     const _id = FlowRouter.getParam('id'); 
     const user = Meteor.users.findOne({_id}); 

     if(!user && self.user) 
      FlowRouter.go('/employees'); 
     self.user = user; 

     if(!user) 
      return; 
     user.email = user.emails[0].address; 
     $('.ui.form').form('set values',user); 
    }); 

}); 

そして最後に。これは正しいです?

Template.UpdateEmployee.onRendered(function() { 
    if(this.user){ 
     user.email = user.emails[0].address; 
     $('.ui.form').form('set values',user); 
    } 
}); 

この解決策にはどんな落とし穴がありますか?

答えて

0

私は本質的にいくつかの欠点を見ることができます。最初は、クライアント上で検索クエリを実行しています。通常、Meteorを使用してサーバーからデータを戻したい場合は、パブリッシュとサブスクライブを行います。

2つめは、URL上のデータを見つけるためにキーを渡していることです。これは、他のユーザーがそのユーザーのデータを見つけるために偽装することができます。

最後に、ユーザーオブジェクトで検索を行っている場合は、そこにデータを格納している可能性があります。これは一般的に悪い習慣です。プロファイルにユーザーデータを保存する必要がある場合は、新しいコレクションを作成し、必要なものを公開/購読することをお勧めします。

+0

私が実際に購読しているのは、購読しているレコードが1つだけですが、まだオブジェクトを取得する必要があるため、IDを提供する必要がないことがわかりました他のユーザーがいないため、1つを見つけることができます。 – pikausp

+0

第二に、従業員の情報を更新する管理者です。あなたの3番目のポイントには、私はドキュメントを読んだので、私が欲しいのは私が望んでいないユーザーが変更可能であることを発見したからです。この場合、ルールを拒否するか、どちらも良い。申し訳ありませんが、電話でのご質問 – pikausp

+0

申し込み方法が表示されませんでした。それから全体的に私はまだあなたが大丈夫だと言っています。私は個人的には、ユーザープロファイルからデータを分離して、ユーザーIDをワイヤで渡すのではなくセッションに保持したいと思います。 – NicholasByDesign

関連する問題