【发布时间】:2016-12-02 16:10:39
【问题描述】:
我不确定这是否是对 React 和 Meteors 连接的限制,因为文档表明它应该可以在没有额外参数的情况下实现。
当我在响应中调用流星订阅时,如果我没有在查询中明确声明参数,它会返回任何数据,而忽略发布函数中的指定数据。
Meteor.publish("supplier", function() {
if(this.userId) {
var user = Meteor.users.findOne(this.userId, { fields : { active : 1 }});
if(user.active != this.userId || user.active != undefined){
// This only returns 1 singular supplier - is correct
var supplier = Supplier.find({ _id : user.active, users : this.userId });
return supplier;
} else {
return this.ready();
}
} else {
return this.ready();
}
});
现在我在 react 中调用订阅
getMeteorData: function () {
var data = {}
handle = Meteor.subscribe("supplier");
if(handle.ready()) {
data.supplier = Supplier.findOne(); // Returns Wrong supplier
//data.supplier = Supplier.findOne({_id: session.get("active")}) // Returns correct supplier
data.supplierReady = true
}
return data;
},
这将返回集合中的第一个供应商,而不是登录服务器上发布功能的供应商!但是,如果我明确地通过 { _id : user.active} 它可以工作!
现在我的理解是,通过在publish 函数内的服务器上执行逻辑,我可以简单地使用Supplier.findOne(),但事实并非如此,我不明白为什么。这是对 React/Meteor 的限制还是我执行错了?
【问题讨论】: