获取数据的方法调用。可以被反应吗?

时间:2014-05-11 11:39:40

标签: meteor

我想从同一个集合中的大量查询中获取数据,不幸的是,meteor尚不支持这些数据。这就是为什么我尝试做这样的事情:

公用

Dep = new Deps.Dependency;

服务器

Meteor.methods({
    fetch: function(){
       var results = Data.find(dataQuery).fetch();
       var otherResults = Data.find(queryThatCannotBeCombinedWithPrevious).fetch(); 

       return results.concat(otherResults);
    },
    save: function(data){
         Data.insert(data);
         Dep.changed();
    }
    update: function(data){
         Data.update({_id: data._id}, data);
         Dep.changed();
    }
});

客户端

Session.setDefault('combinedData', []);
Template.demo.data = function(){    
    Dep.depend();
    Meteor.call('fetch',function(error, data){
        Session.set('combinedData', data);
    });
    return Session.get('combinedData');
};

但这并不起作用,因为客户端上的Dep变量与服务器上的Dep不同。当Data集合的内容发生变化时,有没有办法让方法调用被动?

备注

我目前正在使用Meteor 0.8.1.1,它不允许订阅返回同一集合的多个游标。

1 个答案:

答案 0 :(得分:0)

这需要一个小的黑客,你就会关闭。首先,您需要一个仅客户端依赖,服务器只传递从方法返回的数据并且不共享变量(在服务器上也没有任何需要deps的东西)。其次,你只想获取一次实际变量,否则你最终会得到一个无限循环。

示例实施:

var value = null;
var valueInitialized = false;
var valueDep = new Deps.Dependency();

Template.demo.data = function() {
  valueDep.depend();
  if(!valueInitialized) {
    valueInitialized = true;

    Meteor.call('fetchData', function(err, result) {
      value = result;
      valueDep.changed();
    });
  }
  return value;
};