テンプレート ヘルパーで Meteor メソッドを呼び出すときにレンダリングの問題を回避するにはどうすればよいですか?

Susan Sarandon
リリース: 2024-11-03 17:47:03
オリジナル
336 人が閲覧しました

How to Avoid Rendering Issues When Calling Meteor Methods in Template Helpers?

テンプレート ヘルパーでの 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 サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート