Nếu bạn muốn thiết lập này hoạt động, bạn cần thực hiện như sau:
Meteor.publish('thisNameDoesNotMatter', function () {
var self = this;
var handle = Meteor.users.find({}, {
fields: {emails: 1, profile: 1}
}).observeChanges({
added: function (id, fields) {
self.added('thisNameMatters', id, fields);
},
changed: function (id, fields) {
self.changed('thisNameMatters', id, fields);
},
removed: function (id) {
self.removed('thisNameMatters', id);
}
});
self.ready();
self.onStop(function () {
handle.stop();
});
});
Không ở phía máy khách, bạn cần xác định bộ sưu tập chỉ phía máy khách:
directories = new Meteor.Collection('thisNameMatters');
và đăng ký tập dữ liệu tương ứng:
Meteor.subscribe('thisNameDoesNotMatter');
Điều này sẽ hoạt động ngay bây giờ. Hãy cho tôi biết nếu bạn cho rằng lời giải thích này chưa đủ rõ ràng.
CHỈNH SỬA
Tại đây, self.added/changed/removed
các phương thức hoạt động ít nhiều như một trình điều phối sự kiện. Nói một cách ngắn gọn, họ đưa ra hướng dẫn cho mọi khách hàng đã gọi đến
Meteor.subscribe('thisNameDoesNotMatter');
về các bản cập nhật sẽ được áp dụng trên bộ sưu tập của khách hàng có tên thisNameMatters
giả sử rằng bộ sưu tập này tồn tại. Tên - được truyền làm tham số đầu tiên - có thể được chọn gần như tùy ý, nhưng nếu không có bộ sưu tập tương ứng ở phía máy khách, tất cả các bản cập nhật sẽ bị bỏ qua. Lưu ý rằng bộ sưu tập này có thể chỉ ở phía máy khách, vì vậy nó không nhất thiết phải tương ứng với bộ sưu tập "thực" trong cơ sở dữ liệu của bạn.
Trả lại con trỏ từ publish
của bạn nó chỉ là một phím tắt cho đoạn mã trên, với sự khác biệt duy nhất là tên của một bộ sưu tập thực tế được sử dụng thay vì theNameMatters
của chúng tôi . Cơ chế này thực sự cho phép bạn tạo bao nhiêu "bản sao" của tập dữ liệu tùy thích. Trong một số tình huống, điều này có thể khá hữu ích. Vấn đề duy nhất là các "bộ sưu tập" này sẽ ở chế độ chỉ đọc (điều này hoàn toàn có ý nghĩa với BTW) vì nếu chúng không được xác định trên máy chủ, các phương thức `insert / update / remove 'tương ứng sẽ không tồn tại.