Meteor jsアプリケーションでは非常に興味深い問題があります。テンプレートのonCreatedメソッド内で流星法を呼び出すと、そのメソッド呼び出しのコールバックが結果。これは、流星法のシミュレーションを実行した結果テンプレートが作成されたためです。流星法シミュレーション以外でコードを実行する方法
つの質問:
- される。これはバグでしょうか?それは確かに私が期待した行動ではありません。
- setTimeoutのような奇妙なハックを使わずに、どうすればこの問題を回避できますか?(方法のシミュレーションでは
Meteor.setTimeout
は許可されていません)
いくつかのコード:
// My Template (Not my real code, just to demonstrate)
Template.saying.onCreated(() => {
var tmpl = Template.instance();
tmpl.saying = new ReactiveVar();
Meteor.call('getSaying', (err, saying) => {
// If called inside of a simulation, saying is null
tmpl.saying.set(saying);
});
});
// Assume that the above template is used in an {{each}} block
// and somewhere in my code I call this
Items.insert({});
// Because Items.insert wraps a meteor method which also runs as a
// simulation on the client, then the Template.saying.onCreated
// callback will be called in the context of an active simulation,
// which means that 'getSaying' method call will return immediately
// with undefined as the result.
と評価されます反応変数を設定します。あなたがこの仕事をしても、それは遅くなるでしょう。なぜサーバーから取得したデータをコレクションに入れて、Meteorでクライアントにプッシュできるのでしょうか? –
残念ながら、それは私が使用しなければならないパターンです、各テンプレートはそれ自身のトークンを必要とし、それらのトークンはその場で生成されなければなりません。 – cwohlman