2015-09-28 3 views
1

Я изучаю, как использовать метеорит, и когда я использую каждый шаблон, приложение циклически меняет случайное число раз. Кто-нибудь знает, почему?Каждый шаблон в метеорной петле несколько раз

JS

PlayersList = new Mongo.Collection('players'); 

PlayersList.insert({name: "David" , score:0}); 
PlayersList.insert({name: "Bob", score: 0});; 
PlayersList.insert({name: "Wesley", score: -1000}); 

if(Meteor.isClient){ 
    Template.leaderboard.helpers({ 
     player: function(){ 
      return PlayersList.find(); 
     } 
      }); 
} 

и HTML

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

    <body> 
     <h1>Leaderboard</h1> 

     {{>leaderboard}} 
    </body> 
    <template name="leaderboard"> 
     {{#each player}} 
      <li>{{name}}: {{score}}</li> 
     {{/each}} 
    </template> 
+0

«Случайное число раз», вы имеете в виду: каждый раз, когда вы перезапускаете/обновляете список, он увеличивается дольше? –

+0

Я бы предположил, что вы завершаете инструкции 'PlayersList.insert' внутри предложения' if (Meteor.isServer) '. В противном случае на каждой загрузке будут вставлены игроки, которые могут вызвать «мерцание» –

ответ

3

Сделайте meteor reset, чтобы очистить базу данных и попробовать этот код вместо:

PlayersList = new Mongo.Collection('players'); 

if (Meteor.isClient) { 
    Template.leaderboard.helpers({ 
    player: function() { 
     return PlayersList.find(); 
    } 
    }); 
} 

if (Meteor.isServer) { 
    Meteor.startup(function() { 
    // if there are no players in the database 
    if (PlayersList.find().count() === 0) { 
     PlayersList.insert({name: "David", score: 0}); 
     PlayersList.insert({name: "Bob", score: 0}); 
     PlayersList.insert({name: "Wesley", score: -1000}); 
    } 
    }); 
} 

В исходном коде, игроки были вставлены как от клиента, так и от сервера (не было Meteor.isServer охраны). Каждый раз, когда новый клиент подключается, и каждый раз, когда сервер запускается, будет вставлен новый набор игроков.

В приведенном выше коде мы вставляем новых игроков только тогда, когда сервер начинает и только в том случае, если в базе данных нет игроков. Это гарантирует, что база данных будет высеваться только один раз после сброса.

+0

, также предполагая, что autopublish по-прежнему добавляется. –

Смежные вопросы