Methods 流星数据库变异器如何知道它';是从Meteor.method调用的还是从普通代码调用的?
如果有人对客户做了类似的事情Methods 流星数据库变异器如何知道它';是从Meteor.method调用的还是从普通代码调用的?,methods,meteor,rpc,Methods,Meteor,Rpc,如果有人对客户做了类似的事情 Foo.insert({blah : 1}) 如果Foo是Meteor集合,这实际上会触发Meteor.method调用,如最后一段所述,该调用在客户端和服务器上执行代码 但是,假设我定义了一个方法(在客户端和服务器上),该方法执行相同的操作: Meteor.methods({ bar: function() { Foo.insert({blah : 1}) } }); 现在,我用 Meteor.call("bar"); 由于该方法,现在将
Foo.insert({blah : 1})
如果Foo
是Meteor集合,这实际上会触发Meteor.method调用,如最后一段所述,该调用在客户端和服务器上执行代码
但是,假设我定义了一个方法(在客户端和服务器上),该方法执行相同的操作:
Meteor.methods({
bar: function() {
Foo.insert({blah : 1})
}
});
现在,我用
Meteor.call("bar");
由于该方法,现在将在客户端和服务器上调用Foo.insert
。但是,既然服务器本身就是一个方法,那么客户端调用insert
如何知道不要再次调用服务器呢
此外,是否有一种方法可以在客户端上调用
insert
,而不自动触发规范的服务器端延迟补偿调用并产生同步?(有关我为什么要这样做,请参见)客户端1将成为“存根”。它具有此isSimulation
属性集,使其显示为插入数据以进行延迟补偿
我认为,如果在客户机上运行.method
,则延迟补偿始终处于启用状态,不应输入数据库。因此,在客户端方法上运行的任何东西都将是“伪”类型的模拟
如果尝试将this.isSimulation
设置为false
,则会出现一些奇怪的错误,表明客户端插入开始抛出插入错误
我不太确定如何在错误的模拟中运行它。我认为您必须在其他方法中运行它var dothis=function(){…}
type方法
要执行此“假火”&忘记并仅使用客户端数据,这是我的假设(如果我错了,请更正,以便我更改答案),请修改客户端方法中的\u collection
属性
e、 g如果你有
mydata = new Meteor.Collection("something");
function something() {
mydata.insert({..});
}
改为修改方法以执行此操作
mydata._collection.insert({..});
这将确保数据未同步到服务器,但本地集合将具有此“假数据”
希望这有帮助