2017-10-13 6 views
0

je le code suivant et je suis obtenirItère curseur Meteor aveC#each donne l'erreur

{{}} #each actuellement accepte uniquement les tableaux, les curseurs ou Falsey valeurs

HTML:

<template name='subscribers'> 
    {{#each stat in getPythonStats "WNScan"}} 
    <div> 
    {{stat.name}}: {{stat.value}} 
    </div> 
    {{/each}} 
</template> 

Javascript:

Template.subscribers.helpers({ 
    getPythonStats(server) { 
    var status = WNstatus.find({'server': server}); 
    if (!status) 
     status = [{'status': 'shutdown'}, {'count': 0}, {'startTime': 'Never'}, {'runTime': 0}]; 
    console.log(status); 
    return status; 
    } 
}); 

Sortie de la console:

{_id: M…D.ObjectID, server: "WNScan", status: "shutdown", startTime: "2017-10-10 22:40:12", runTime: 5.39, …} 

On dirait un curseur pour moi. Je pensais au début que le problème était avec l'argument à getPythonStats confondant #each, mais cela ne semble pas être le problème puisque l'assistant est appelé. J'ai essayé à la fois collection.find et collection.findOne (qui retourne des résultats identiques puisqu'il n'y a jamais plus d'un document qui satisfait la requête), avec le même résultat. J'ai un code presque identique ailleurs qui utilise {{with getPythonStats "WNScan"}} et cela fonctionne bien. En outre, si le document "WNScan" est introuvable, le tableau renvoyé génère la même erreur. C'est avec la dernière version 1.5 de Meteor.

+0

Sortie de la console ne semble _not_ comme curseur, il ressemble à un seul document . Bien sûr, '{{#each}}' ne le répétera pas. S'il vous plaît, ajoutez du code pour clarifier 'WNstatus' - qu'est-ce que c'est? – Styx

+0

'WNStatus' est un nom de schéma de collection. –

Répondre

4

Si je comprends bien, vous voulez itérer sur chaque clé status mais #each a besoin d'un tableau ou un curseur et status n'est pas!

collection.find renvoie un curseur, collection.findOne renvoie un document (pas un tableau de documents).

L'équivalent de collection.findOne en utilisant collection.find est collection.find().fetch()[0]

Javascript:

const defaultStatus = { 
    status: 'shutdown', 
    count: 0, 
    startTime: 'Never', 
    runTime: 0 
}; 
Template.subscribers.helpers({ 
    getPythonStats(server) { 
     const status = WNstatus.findOne({ 'server': server}); 
     console.log(status); 
     return _.pairs(status || defaultStatus); 
    } 
}); 

HTML

<template name='subscribers'> 
    {{#each stat in getPythonStats "WNScan"}} 
    <div> 
     <!-- stat is now an array containing key and value --> 
     {{stat.[0]}}: {{stat.[1]}} 
    </div> 
    {{/each}} 
</template> 

_.pairs() documentation

+0

Parfait. Fonctionne bien une fois que je décale les éléments 'ID' et' server' hors du tableau. Je ne connaissais pas '_.pair'. Et merci d'expliquer clairement la différence entre 'find' et' findOne' (et comment faire fonctionner 'find' comme' findOne'.) J'apprends toujours ce truc par moi-même. –