テンプレート ヘルパーでの Meteor メソッドの利用
Meteor 開発の一般的なシナリオは、クライアント側からサーバー側のメソッドを呼び出す必要があることです。テンプレートヘルパー。ヘルパーにメソッドを直接インポートするのは簡単ですが、この方法では予期しないレンダリングの問題が発生する可能性があります。
質問に示されている例を考えてみましょう。
<code class="js">// lib/test.js Meteor.methods({ viewTest: function (str) { return str; } }); // client/myView.js Template.helloWorld.helpers({ txt: function () { var str = Meteor.call('viewTest', 'Hello World.'); return str; } });</code>
ただし、テンプレートをレンダリングするときは、テンプレートが viewTest メソッドから値を受け取らないことに気づくかもしれません。これは、Meteor がメソッドの実行を完了する前にテンプレートをレンダリングしようとするために発生します。
拡張ソリューション
この課題を克服するために、Meteor はリアクティブ変数を使用した代替アプローチを提供します。
<code class="js">// client/myView.js Template.helloWorld.helpers({ txt: function () { return Template.instance().myAsyncValue.get(); } }); Template.helloWorld.created = function () { var self = this; self.myAsyncValue = new ReactiveVar("Waiting for response from server..."); Meteor.call('getAsyncValue', function (err, asyncValue) { if (err) console.log(err); else self.myAsyncValue.set(asyncValue); }); };</code>
このアプローチでは、テンプレート インスタンスの作成されたライフサイクル フック内にリアクティブ変数 myAsyncValue が作成されます。その後、Meteor メソッド getAsyncValue が呼び出され、完了すると、その結果がリアクティブ変数に設定されます。
リアクティブ変数を使用すると、その値の変更が対応するヘルパーに自動的に反映され、テンプレートが確実に反映されます。メソッドが完了すると、反応的に更新されます。
以上がテンプレート ヘルパーで Meteor メソッドを呼び出すときにレンダリングの問題を回避するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。