我想从同一个集合中的大量查询中获取数据,不幸的是,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,它不允许订阅返回同一集合的多个游标。
答案 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;
};