我正在使用angularjs和meteor实现通知系统。
在我的出版物代码中,
我有这样的事情:
var retVal = Notifications.find({recipient: userId});
var handle = retVal.observeChanges({
//when a new notification is added
added: function (doc, idx) {
count++;
if (!initializing){
console.log("A record was added");
self.changed("counts", userId, {count: count});
}
},
removed: function (doc, idx) {
count--;
self.changed("counts", userId, {count: count});
}
});
最后我返回retVal。 在我的控制器中,我订阅了该出版物。 代码似乎很好,每当添加新文档时,服务器都会触发添加的功能。但是,当添加新文档时,如何通知客户端(类似于触发控制器中的功能)?添加的功能仅在服务器中触发。
答案 0 :(得分:1)
我认为您应该在客户端上复制observeChanges()
。
因此,它将能够观察由subscribe()
函数创建和同步的客户端集合。
答案 1 :(得分:1)
我无法看到您的出版物标题,您是否期望参数?
对于绑定集合,您只需使用$ meteorCollection服务:
$scope.notifications = $meteorCollection(Notifications);
我们刚刚更新了我们的API(版本0.6.0-alpha),它在内部进行了observeChanges以查找集合中的任何更改。
但不要忘记订阅该系列 - 您可以通过两种方式实现这一目标:
$meteorSubscribe.subscribe("publicationName", parameters)
- 返回一个承诺。$scope.notifications = $meteorCollection(Notification).subscribe("publicationName", parameters);
- 虽然较短,但不会返回承诺。如果其中一个参数更改了出版物,则应将其自动运行:
$meteorUtils.autorun($scope, function(){
$meteorSubscribe.subscribe("publicationName", {
limit: parseInt($scope.getReactively('perPage')),
skip: (parseInt($scope.getReactively('page')) - 1) * parseInt($scope.getReactively('perPage')),
sort: $scope.getReactively('sort')
}));
});
希望它有所帮助,让我知道如何改进答案和文档。