2015-01-14 21 views
10

Sadece bir koleksiyon için kullanıcı için ödeme yayınlamak mümkün mü? Toplam sayımı ana sayfada görüntülemek istiyorum, ancak tüm verileri kullanıcıya iletmiyorum. Bunu çalıştığınızdaMeteor - Koleksiyon için sadece bir sayı yayınla

Meteor.publish('task-count', function() { 
    return Tasks.find().count(); 
}); 

this.route('home', { 
    path: '/', 
    waitOn: function() { 
     return Meteor.subscribe('task-count'); 
    } 
}); 

ben sonsuz bir yükleme animasyonu olsun: Bu denedim ama çalışmıyor şeydir. Bazı yardımcı içinde

var count; /// Global Client Variable 

Meteor.startup(function() { 
    Meteor.call("count", function (error, result) { 
     count = result; 
    }) 
}); 

dönüşü count

Sunucu:

+0

olanlar ise 'Tasks' kullanıcıları ya da bir şey aittir? Neden soruyorum ki, bu sayımı 'kullanıcıların' koleksiyonunda saklayabilir ve oradan alabilirsiniz. – ajduke

cevap

16

Meteor.publish işlevleri, imleçleri döndürmeli, ancak burada, koleksiyonunuzdaki toplam belge sayısı olan bir Number doğrudan dönüyorsunuz. zarif ve etkili hem çözüm kullanarak:

Meteor Sayma belgeler bunu doğru şekilde yapmak istiyorsanız göründüğünden daha şaşırtıcı daha zor bir iştir.

paket ros:publish-counts (tmeasday:publish-counts bir çatal), küçük koleksiyonları (100-1000) ya da fastCount seçeneğini kullanarak (onbinlerce) büyük koleksiyonları için "neredeyse kesin" sayımları için sayımların doğru sağlar.

// server-side publish (small collection) 
Meteor.publish("tasks-count",function(){ 
    Counts.publish(this,"tasks-count",Tasks.find()); 
}); 

// server-side publish (large collection) 
Meteor.publish("tasks-count",function(){ 
    Counts.publish(this,"tasks-count",Tasks.find(), {fastCount: true}); 
}); 

// client-side use 
Template.myTemplate.helpers({ 
    tasksCount:function(){ 
    return Counts.get("tasks-count"); 
    } 
}); 

Bir istemci tarafı reaktif sayımı alırsınız hem de sunucu tarafı makul ölçülebilir uygulanması:

Sen bu şekilde kullanabilirsiniz.

Bu sorun önerilen bir okuma olan (ücretli) kurşun geçirmez Meteor derste ele alınmaktadır: https://bulletproofmeteor.com/

6

Ben Meteor.call

Client kullanmak istiyorsunuz

Meteor.methods({ 
    count: function() { 
    return Tasks.find().count(); 
    } 
}) 

* reaktif olmaz bu çözümü unutmayın. Bununla birlikte, eğer reaktivite istenirse, birleştirilebilir.

İlgili konular