0

まだ流星アプリで、ミニモンゴからのデータ処理を改善する方法を知りたいです。

SQL / PHP に慣れているので、minimongo コレクションからオブジェクトを 1 回だけ find() し、毎回コレクションに再アクセスすることなく、ヘルパーを使用して各プロパティにアクセスする方法を知りたいです。

今まで、私がやったことは次のようなものでした:

Template.profile.helpers({
  name: function(e, tmpl){
    return Meteor.users.FindOne({_id: Meteor.userId()}.profile.name;
  },
  phone: function(e, tmpl){
    return Meteor.users.FindOne({_id: Meteor.userId()}.profile.phone;
  }

[...] });

しかし、それは退屈になりつつあり、それを処理するためのより効率的な方法があるに違いないと思います.1回だけユーザー情報全体を読み込んでから、1つのパラメータを取るヘルパーで表示して、そのようなデータを表示することができます: { {データ名}}、{{データ電話}}

そのようなヘルパーが1つだけの場合:

Template.profile.helpers({
  data: function(aString){
    if (aString == "phone)
      return [...].phone;
    }
  }
[...]
});

もちろん、セッション値を使用することもできますが、それが私ができるほど関連性があるかどうかはわかりません。

別のこと: Meteor セッションを終了する方法は? PHP ではブラウザを閉じるとセッションが終了し、Cookie は一定期間保持されるため、Meteor セッションでは毎日のように再接続する必要がなく、ログが残っているようです。

誰かがこれについて私を案内してくれますか、それとも良い習慣/ヒントを教えてくれますか? 私はまだドキュメントを読んでいますが、それはかなり巨大です:S

ありがとうございます !

4

2 に答える 2

0

Atmosphere でコレクション ヘルパー パッケージを見つけることをお勧めします。これにより、currentUser.name をテンプレートに記述できるようになり、ユーザー名ヘルパー関数の戻り値が自動的に返されます。

このまま作業しても問題ありません。関数が複数回呼び出されても問題ありません。アプリのパフォーマンスが損なわれることはありません。

PHP と流星のセッションは異なります。メテオ セッションは、ブラウザ ウィンドウが開いているか、ページが更新されている限り続きます。流星のセッションがあなたの問題を解決する方法ではないというあなたは正しい.

于 2015-04-15T13:51:24.647 に答える
0

ここで注意しなければならないのは、クライアントを呼び出しMongo.Collection.find()たときに実際にサーバーにリクエストを送信するのではなく、クライアントの miniMongo インスタンスによって処理されるため、実際にはそれほど非効率的ではないということです。また、この特定の例では、現在のユーザーは常に利用可能ですMeteor.user()-- 使用する必要はありませんMeteor.users.find({_id: Meteor.userId()});(詳細についてはドキュメントを参照してください)。

ただし、本当にその値をキャッシュしたい場合は、次のようにすることができます。

// JS
var data; // scoped so it's available to the whole file

Template.profile.onCreated({
    data = Meteor.users.findOne({_id: Meteor.userId()}); // above scope makes this new definition available to the whole file
});

次に、文字列引数で説明していることを行うには、次のようなことができます...

Template.profile.helpers({
    data: function(aString) { 
      if (data) { return data[aString]; }
    }
});

おそらくより良いオプションは、テンプレートにデータ コンテキストを送信することです。HTML ファイルでは次のようになります。

{{> profile currentUser}} <!-- currentUser returns Meteor.user() -->

次のようにヘルパーが直接利用できますthis

Template.profile.helpers({
  data: function(aString) { 
    return this[aString];
  }
});

ルーティングに IronRouter を使用している場合は、IronRouter を介してデータ コンテキストを渡すこともできます。

Meteor セッションに関しては、PHP 用のモデルとはモデルが異なります。PHP では、セッション情報をサーバーに保存し、サーバーにアクセスするたびに、ブラウザー (より一般的にはクライアント) がセッション ID を送信して、セッションに関連するものをすべて検索できるようにします (可能性については、この質問を参照してください)。より良い説明)。Meteor は接続されているクライアントを追跡するため、ブラウザーが開いている限り、セッションは開いたままになります。Meteor ユーザー セッションを操作する必要がある場合は、この質問をご覧ください。

于 2015-04-15T13:54:19.230 に答える