web-dev-qa-db-ja.com

meteor.jsのテンプレートonloadイベント

MeteorがDOM要素の「クリック」などのイベントを公開していることを知っていますが、テンプレートまたはパーシャルがロードされたときに発生するロードイベントがあるかどうか疑問に思っていますか?どうすればこれを達成できますか?

ありがとう。

23
Gezim

Meteorが0.4.0プレビューから始まる場合は、 Template.myTemplate.created

Template.myTemplate.createdただし、DOMはまだ準備されていません。

DOMを操作する必要がある場合は、 Template.myTemplate.rendered 代わりに、ブール値を使用して、次のようにTemplateオブジェクト内の状態を追跡します。

Template.myTemplate.rendered = function() {
    if(!this._rendered) {
      this._rendered = true;
      console.log('Template onLoad');
    }
}
42
Joscha

以下は動作するはずです。
テンプレートがDOMに追加されてレンダリングされると、Meteor.deferが呼び出されます。

<template name="temp">
    //regular stuff
    {{invokeAfterLoad}}
</template>

Template.temp.invokeAfterLoad = function () {
  Meteor.defer(function () {
     $('mydiv').jquerify();
  });
  return "";
};
11
Nachiket

私は受け入れられた答えよりもこれをお勧めします、少し少ない私見:

<template name="temp">
    {{aReactiveHelper}}
</template>

Template.temp.aReactiveHelper = function() {
  var someValue = Session.get('someValue');
  invokeAfterLoad();
  return someValue;
};

var invokeAfterLoad = function () {
  Meteor.defer(function () {
     $('mydiv').doSomething();
  });
};

テンプレートは、リアクティブオブジェクトに反応するため、テンプレートの読み込み後に何かを呼び出すことを想定しています。

ここでの利点は、テンプレートにアニメーションコードを追加しないことです。

5
Mike Bannister