簡體   English   中英

流星的新手,為什么此模板不顯示所選名稱?

[英]New to Meteor, why wont this template display the selected name?

我正在使用教程應用程序,並且在底部的模板中,h3標簽應顯示頁面上所選人員的姓名。 這應該使用showSelectedPlayer幫助器完成。 但是,名稱在運行時未出現在站點上。 有人知道為什么是這樣嗎? 我已經嘗試過find和findOne並重寫了所有內容。

編輯1:我將showSelectedPlayer調用與助手一起放置,但仍然無法正常工作

的HTML

<head>
    <title>LeaderBoard</title>
</head>

<body>
    <h1>Leaderboard</h1>

    {{>leaderboard}}
</body>
<template name="leaderboard">
    {{#each player}}
        <li class="player {{selectedClass}}">{{name}}: {{score}}</li>
    {{/each}}
    <br>
    <input type = "button" class="increment" value="Give 5 Points">
    <br>
    <input type = "button" class="decrement" value="take 5 Points">
    <br><br>
        <h3>Selected Player is {{showSelectedPlayer.name}}</h3>

</template>

JS

    PlayersList = new Mongo.Collection('players');
if(Meteor.isClient) {
    Template.leaderboard.helpers({
        player: function(){
        return PlayersList.find({}, {sort: {score: -1, name: 1}} ); //sorting comes from mongodB
        },
        'selectedClass': function(){
        var playerId = this._id;
        var selectedPlayer = Session.get('selectedPlayer');
        if(playerId == selectedPlayer){
            return "selected"
        }
        },
        showSelectedPlayer : function(){
        var selectedPlayer = Session.get('selectedPlayer');
        return PlayersList.find(selectedPlayer);
        }
        });
    Template.leaderboard.events({
        'click .player' : function(){
            var playerId = this._id;
            Session.set('selectedPlayer', playerId);
            var selectedPlayer =  Session.get('selectedPlayer');
            console.log("Wesley Sucks");
            console.log(selectedPlayer);
        },
        'click .increment' :function(){
            console.log("button Clicked");
            var selectedPlayer = Session.get('selectedPlayer');
            PlayersList.update(selectedPlayer,{$inc:  {score:5}});
        },
        'click .decrement' :function(){
            console.log("dec button clicked");
            var selectedPlayer = Session.get('selectedPlayer');
            PlayersList.update(selectedPlayer, {$inc: {score:-5}});
            },
        'showSelectedPlayer': function(){
            var selectedPlayer = Session.get('selectedPlayer');
            return PlayersList.find(selectedPlayer);
        }
        });
}

if (Meteor.isServer){
    Meteor.startup(function() {

            if(PlayersList.find().count() === 0){
            PlayersList.insert({name: "Davis" , score: 0});
            PlayersList.insert({name: "Bob" , score : 0});
            PlayersList.insert({name: "Wesley", score: -10000});
            }
            });
}

PlayersList.find(selectedPlayer)應該是方法showSelectedPlayer PlayersList.findOne(selectedPlayer) ,因為find()返回一個數組,並且沒有名為name屬性。

另外,您可以使用Chrome開發者工具通過以下方式進行調試:

var selectedPlayer = Session.get('selectedPlayer');
console.log(selectedPlayer);
console.log(PlayersList.find(selectedPlayer));
return PlayersList.find(selectedPlayer);

因此,您可以驗證在更新Session值和返回值是否符合您的期望時,是否實際上以響應方式調用了輔助方法。 如果沒有,則您的代碼上還有其他問題。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM