0

我只想将特定事件添加到符合特定条件的元素,在这种情况下,如果在会话中选择了该元素。这是一些示例代码:

Template.leaderboard.events({
    'click Session.get("selected_team") .win': function () {
        Teams.update(Session.get("selected_team"), {$inc: {won: 1, score : 5, played: 1}});
    }
});

这会在会话中查找选定的团队,然后更新该项目。那有意义吗?有没有更好的方法来实现我想要的?

4

2 回答 2

0

在排行榜示例中,所选玩家的 css 类为“selected”,因此您需要做的就是:

Template.player.events({
  'click .selected': function () {
    console.log('clicked on the selected player:', this.name);
  }
});

您可以对可能希望有条件地触发事件的其他元素使用相同的模式:根据条件为它们(或不)分配特定的 css 类。

如果您不想通过模板向元素添加 css 类(无论出于何种原因),您最好只在 Javascript 中检查您的条件:

Template.player.events({
  'click': function () {
    if (Session.get("selected_player") === this._id) {
      console.log('clicked on the selected player:', this.name);
    }
  }
});
于 2013-01-22T01:25:19.757 回答
-1

由于您已将 Session.get 语句作为字符串的一部分包含在内,因此它不会按照您编写的方式工作。像这样的东西可能会起作用:

Template.leaderboard.events({
  'click ' + Session.get("selected_team") + ' .win': function() {}
});

......但我不会推荐它。相反,您可能应该这样做:

Template.leaderboard.events({
  'click .team': function() {
    Teams.update(this.id, {...});
  }
});

Template.leaderboard.teams = function() {
  return Teams.find({});
}

在您看来:

<template name="leaderboard">
  {{#each teams}}
    <div class="team">{{team}}</div>
  {{/each}}
</template>

每个仍然在排行榜模板中记住它的上下文,在事件处理程序中.team被称为,所以你可以只传递给查询。thisthis.id

于 2013-01-21T23:17:38.323 回答