转动一个meteor方法,将单个对象返回到车把的上下文中

las*_*igh 4 handlebars.js meteor

在meteor.com上的基本排行榜示例中,有一个名为selected_name的方法.

  Template.leaderboard.selected_name = function () {
    var player = Players.findOne(Session.get("selected_player"));
    return player && player.name;
  };

  {{#if selected_name}}
  <div class="details">
    <div class="name">{{selected_name}}</div>
    <input type="button" class="inc" value="Give 5 points" />
  </div>
  {{/if}}
Run Code Online (Sandbox Code Playgroud)

相反,我想返回整个玩家对象,然后通过把手将该对象视为上下文.我希望我能这样说:

  Template.leaderboard.selected_person = function () {
    var player = Players.findOne(Session.get("selected_player"));
    return player || false;
  };

  {{#if selected_person}}
  <div class="details">
    <div class="name">{{name}}</div>
    <input type="button" class="inc" value="Give 5 points" />
  </div>
  {{/if}}
Run Code Online (Sandbox Code Playgroud)

上面的#if块实际上不适用于流星.#if语句只是在评估selected_person方法,而嵌套的{{name}}绝对没有.我想知道是否可以编写一个方法,以便返回的对象可以用作#if块的上下文.

las*_*igh 7

解决了!如果我只使用#with而不是#if,那么一切都很好.正如它在车把文件中说的那样You can shift the context for a section of a template by using the built-in with block helper.

  {{#if selected_person}}
  {{#with selected_person}}
  <div class="details">
    <div class="name">{{name}}</div>
    <input type="button" class="inc" value="Give 5 points" />
  </div>
  {{/with}}
  {{/if}}
Run Code Online (Sandbox Code Playgroud)

嵌套的if/with非常麻烦,显然不值得只渲染名称,但我可以想到,对单个对象的更多属性进行特殊渲染会很有用.