0

docs.meteorによると、「Template.myTemplate.rendered」コールバックの本文では、「this」はテンプレートインスタンスオブジェクトです。

ただし、コールバックに「デバッガー」行を挿入し、ブラウザー開発ツールを使用してチェックすると、「this」の値は「window」になります。私は何か間違ったことをしていますか?

リーダーボードの例を使用しています-ハンドルバーテンプレートは次のとおりです。


<template name="leaderboard">

    {{#each players}}
      {{> player}}
    {{/each}}

  {{#if selected_name}}
  <div class="details">
    <div class="name">{{selected_name}}</div>
    <input type="button" class="inc" value="Give 5 points" />
    <input type="button" class="fastclick inc" value="Give 5 points - fast" />
  </div>
  {{/if}}

  {{#unless selected_name}}
  <div class="none">Click a player to select</div>
  {{/unless}}
</template>

<template name="player">
  <div class="player {{selected}} fastclick">
    <span class="name">{{name}}</span>
    <span class="score">{{score}}</span>
  </div>
</template>

そして、「Template.leaderboard.rendered」コールバック:


  Template.leaderboard.rendered = function (){
    Meteor.defer(function() {
debugger;
      new FastClick(document.body);
      console.log("Template.leaderboard.rendered: " + JSON.stringify(this));
    });
  }

}
4

2 に答える 2

1

あなたの問題はコールバックthis内にあると思います。Meteor.deferつまり、コンテキストthisが変更されたことを意味します。変数にキャッシュthisしてから、その変数を に出力してみてくださいconsole.log()。例えば:

Template.leaderboard.rendered = function (){
 var self = this; 
   Meteor.defer(function() {
    debugger;
    new FastClick(document.body);
    console.log("Template.leaderboard.rendered: " + self );
  });
 }
}
于 2012-12-13T20:37:04.203 に答える
-1

コールバックの本体では、これはテンプレートのこのオカレンスに固有のテンプレートインスタンスオブジェクトであり、再レンダリング後も保持されます。作成および破棄されたコールバックを使用して、オブジェクトの初期化またはクリーンアップを実行します。

出典:http ://docs.meteor.com/#template_rendered

したがってthis、レンダリングしているテンプレートの特定のインスタンスを参照します。

于 2012-12-13T20:39:26.943 に答える