2012-04-18 20 views
9

Tôi đang cố gắng để hiển thị một cảnh báo cho người dùng khi dữ liệu được bổ sung vào cơ sở dữ liệu. Vì vậy, tôi đã viết (trên các mặt hàng):cursor.observe ({} thêm) hành vi trong Meteor

Meteor.autosubscribe(function() { 
    ItemCollection.find().observe({ 
    added: function(item) { 
     // Alert code 
    } 
    }); 
}); 

Và tôi phát hiện ra rằng không chỉ cảnh báo được hiển thị khi một mục mới được bổ sung vào cơ sở dữ liệu ở phía máy chủ (mà tôi giả sử là bình thường :)) nhưng cảnh báo cũng được hiển thị cho từng mục được thêm trước đó khi tôi làm mới trang. Tôi cho rằng Meteor lấy tất cả các dữ liệu từ cơ sở dữ liệu Mongo khi khởi động (để cư Minimongo DB địa phương) và sau đó 'thêm' sự kiện cháy cho từng hạng mục được thêm vào trong cơ sở dữ liệu địa phương.

Nhưng đây có phải là hành vi bình thường? Làm thế nào tôi có thể nhận được chỉ các mục được "thực sự" được thêm vào trong cơ sở dữ liệu trên máy chủ?

Trả lời

13

Bạn đang quan sát một con trỏ cho cơ sở dữ liệu phía khách hàng và cơ sở dữ liệu có thể không hoàn thành đồng bộ cho đến khi sau khi trang được thực hiện tải, vì vậy hành vi có ý nghĩa. Bạn có thể muốn xem xét đăng ký một cách rõ ràng một bộ sưu tập như được thảo luận trong câu trả lời cho this question.

Nếu dữ liệu của bạn đã có một trường created_at sau đó bạn có thể quan sát các mặt hàng tạo ra sau khi tải trang.

ItemCollection.find({created_at : {$gt: some_current_time}}).observe({ 
    added: function(item) { 
     // Alert code 
    } 
    }); 
+0

Cảm ơn sự giúp đỡ của bạn, đó chỉ là những gì tôi cần! Tôi sẽ thử cái này! – TiuSh

+0

Tuyệt vời! Tôi thực sự vui mừng khi biết rằng nó đã giúp. – lashleigh

+0

Cũng thấy câu trả lời cho câu hỏi này: http://stackoverflow.com/questions/21355802/meteor-observe-changes-added-callback-on-server-fires-on-all-item –