Tweets = new Meteor.Collection('tweets');
if (Meteor.isClient) {
Meteor.subscribe('tweets');
Template.Panel.helpers({
items: function() {
var days_tweets = Tweets.find();
console.log(days_tweets.count());
return days_tweets;
});
}
if (Meteor.isServer) {
Meteor.publish('tweets', function() {
return Tweets.find({}, {limit: 1000});
});
Die Vorlage:Meteor Helfer genannt mehrfach durch einzelne Template-Variable
<body>
<h1>This is a list of tweets</h1>
{{> Panel}}
</body>
<template name="Panel">
<h2>A list of tweets sorted by size</h2>
{{#each items}}
<p>item</p>
{{/each}}
</template>
Und die Konsole ausgegeben werden, wenn die Seite geladen wird:
Tweet count: 0
Tweet count: 129
Tweet count: 272
Tweet count: 366
Tweet count: 457
Tweet count: 547
Tweet count: 672
Tweet count: 814
Tweet count: 941
Tweet count: 1000
So ist die Hilfsfunktion 10-mal auf Seite feuert laden (die Anzahl variiert). Kann mir jemand erklären, was hier passiert? Ich kann keinen Hinweis darauf finden, akzeptiere in Situationen, in denen der Helfer von mehreren {{}} auf der Vorlage aufgerufen wird. Auch eine Möglichkeit, es zu stoppen? Irgendwann muss ich die Tweets auf einmal bearbeiten, bevor sie gerendert werden.
Ok danke. Ich habe so etwas angenommen. Gibt es eine Möglichkeit, damit aufzuhören? (Angenommen, die Sammlung auf dem Server ändert sich nicht, was hier der Fall ist). Es ist seltsam, eine Synchronisierung zwischen der festen Server- und der Client-Sammlung asynchron auszuführen. – kendlete
@kendlete aktualisierte meine Antwort mit einem Beispiel, wie man mit dem Verhalten des Subskriptions-Systems von Meteo arbeitet –
'Meteorsubscribe()' hat auch einen Onready-Callback in den Dokumenten, der verwendet werden könnte, um mehr Code einzufügen, bis das Abonnement ist bereit. Das ist anders als .ready(), das einen booleschen Wert zurückgibt, wenn das Abonnement bereit ist. Ein wenig mühsamer als Marcos Ansatz. – Paul