javascript - 如何在 meteor 事件期间在单个 <li> 上添加类

标签 javascript mongodb meteor meteor-blaze

我是 meteor 框架的新手,我尝试创建一个项目,每次我在单个 <li> 上单击名称时背景应该变成黄色。如果我点击另一个 <li>前一个应该恢复到原来的颜色,下一个 <li>应该变成黄色。

所以我尝试使用来自 MongoDb 的唯一 ID 在上面添加 .selected 类。通过比较 id 的 using if 语句,但它不起作用。

代码如下:

正文.html:

<body>
    <h1>Leaderboard</h1>
    {{> leaderboard}}
</body>

<template name="leaderboard">
<ul>
    {{#each player}}
        <li class="player {{selectedClass}}">{{name}}: {{score}}</li>
    {{/each}}
</ul>
</template>

正文.js:

 import {Template} from 'meteor/templating';
 import './body.html';
 import {PlayersList} from '../api/players.js';

    Template.leaderboard.helpers({
            'player': function(){
                return PlayersList.find();
            },
            'selectedClass': function(){
                var playerId = this._id;
                var selectedPlayer = Session.get('selectedPlayer');
                if(playerId == selectedPlayer){
                    return "selected"
                }
            }  
        });

    Template.leaderboard.events({
        'click .player': function(){
            var playerId = this._id;
            Session.set('selectedPlayer', playerId);
        }
    });

主.css

.selected{
    background-color: yellow;
}

这是输出:

output

最佳答案

我建议对您的模板进行一些更改。我在此处添加了一些注释。

排行榜.html

(请注意,我们现在将 _id 传递给助手)

<template name="leaderboard">
  <ul>
    {{#each player}}
      <li class="player {{selectedClass _id}}">{{name}}: {{score}}</li>
    {{/each}}
  </ul>
</template>

排行榜.js

import {Template} from 'meteor/templating';
import {Tracker} from 'meteor/tracker'; // import Tracker here
import './body.html';
import {PlayersList} from '../api/players.js';

Template.leaderboard.onCreated(function() {
  // subscribe to your publication in the onCreated lifecycle call
  // to ensure the playerList is available for the component
  // http://blazejs.org/api/templates.html#Blaze-TemplateInstance-subscribe
  this.subscribe('<publication-name>');
});

Template.leaderboard.helpers({
  'player': function(){
    return PlayersList.find();
  },

  // pass in data to helper
  // http://blazejs.org/guide/reusable-components.html#Pass-data-into-helpers
  'selectedClass': function(playerId) {
    // use Session.equals here - fewer invalidations are triggered
    // https://docs.meteor.com/api/session.html
    return Session.equals('selectedPlayer', playerId)
      ? 'selected' : '';
  }  
});

Template.leaderboard.events({
    'click .player': function() {
        var playerId = this._id;
        Session.set('selectedPlayer', playerId);
    }
});

关键要点是了解您的助手和事件映射中的this 是什么。

关于javascript - 如何在 meteor 事件期间在单个 <li> 上添加类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47159422/

相关文章:

IE11 的 Javascript 问题

javascript - HTML 表格标题中的垂直(旋转)文本

javascript - 这个 JavaScript 片段发生了什么?

java - 如何使用 MongoTemplate 将单个字段插入到 JSON 中?

javascript - 使用 jQuery 的 Meteor.startup()

node.js - React-Router 和 Meteor 无法在刷新时使用参数渲染路由

meteor - 如何在 meteor 中包含来自CDN的JavaScript?

javascript - 如何在javascript中设置弹出文本的格式?

java - 来自 MongoDB BSON 的 Jackson ObjectMapper

javascript - 为什么 JSON 不支持 NaN 时 MongoDB 允许 NaN 值?