当mongo集合更新时,Meteor运行一个函数

时间:2015-04-13 00:28:38

标签: meteor

我正在尝试使用Meteor做一个简单的原型(我对Meteor来说很新)。

我在isClient块中有以下内容

    Template.imageList.helpers({
    images: function() {
        return Images.find({});
  },
}
);

然后为了快速演示目的,我将使用meteor mongo和以下

插入数据
db.images.insert({ imgSrc: "http://mysite/img1.png", createdAt: new Date() })

这有效,我可以看到ui上反映的变化,但是当发生这种情况时我还需要运行客户端javascript函数。我一直在尝试像pub / sub和Tracker这样的东西但却无法正常工作。

任何指导都会很棒。

3 个答案:

答案 0 :(得分:4)

使用meteor-collections-hooks更简单的方法来完成此任务。

meteor add matb33:collection-hooks

例如。

Images = new Mongo.Collection('Images')
example = function(){
  console.log("updated")
}
if (Meteor.isClient) {
  Images.before.update(function(userId, doc, fieldNames, modifier, options){
     example();
  })
}
每次example()更新时,Images collection函数都会运行。

答案 1 :(得分:2)

使用observeChanges

Images.find().observeChanges({
   added: function (id, fields) {
       runFunction();
   },
   changed: function (id, fields) {
       runFunction();
   },
   removed: function (id) {
       runFunction();
  }
});

请点击此处了解详情:http://docs.meteor.com/#/full/observe_changes

答案 2 :(得分:0)

在客户端的模板帮助程序上运行函数,如:

Template.imageList.helpers({
  images: function() {
    imgs = Images.find({});
    yourFunction();
    return images;
  }
});

或使用Tracker.autorun包装器:

Tracker.autorun(
   Images.find({});
   yourFunction();
)