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});
});
Mẫu:Meteor helper gọi nhiều lần bằng mẫu đơn biến
<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>
Và giao diện điều khiển đầu ra khi tải trang:
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
Vì vậy, các chức năng helper bắn 10 lần trên trang tải (số lần thay đổi). Bất cứ ai có thể giải thích những gì đang xảy ra ở đây? Tôi không thể tìm thấy bất kỳ tham chiếu nào về điều này, chấp nhận trong các tình huống mà trình trợ giúp được gọi từ nhiều {{}} trên mẫu. Ngoài ra bất kỳ cách nào để ngăn chặn nó? Cuối cùng tôi cần phải xử lý các tweet trong một lần trước khi chúng được trả lại.
Ok cảm ơn. Tôi giả định một cái gì đó như thế này. Có cách nào để ngăn chặn nó làm điều này? (giả sử bộ sưu tập trên máy chủ không thay đổi, đây là trường hợp ở đây). Có vẻ lạ khi có đồng bộ hóa giữa máy chủ cố định và bộ sưu tập máy khách đang chạy loại không đồng bộ. – kendlete
@kendlete đã cập nhật câu trả lời của tôi với ví dụ về cách làm việc với hành vi của hệ thống đăng ký của thiên thạch –
'Meteor.subscribe()' cũng có một cuộc gọi lại trong tài liệu, có thể được sử dụng để trì hoãn việc chèn thêm mã cho đến khi đăng ký sẳn sàng. Đó là khác với .ready() trả về một boolean nếu thuê bao đã sẵn sàng. Hơi cồng kềnh hơn, có lẽ, hơn là cách tiếp cận của Marco. – Paul