0

如果有人在客户端上做某事,例如

Foo.insert({blah : 1})

哪里Foo是 Meteor 集合,这实际上触发了一个 Meteor.method 调用,如http://docs.meteor.com/#meteor_methods的最后一段中所述,该调用在客户端和服务器上执行代码。

但是,假设我定义了一个做同样事情的方法(在客户端和服务器上):

Meteor.methods({
  bar: function() { 
    Foo.insert({blah : 1}) 
  }
});

现在,我在客户端触发这个

Meteor.call("bar");

Foo.insert作为该方法的结果,现在将在客户端和服务器上调用。但是,客户端调用insert知道不再调用服务器,因为它本身就是一个方法?

此外,有没有一种方法可以insert在客户端调用而不会自动触发规范的服务器端延迟补偿调用并产生同步?(关于我为什么要这样做,请参阅Loading a Meteor client app with fake fire-and-forget data

4

1 回答 1

1

客户端成为“存根”。它具有此isSimulation属性集,使其看起来好像插入数据以进行延迟补偿。

我认为如果 a.method在客户端上运行,则延迟补偿始终处于启用状态,并且不应进入数据库。所以在客户端方法上运行的任何东西都是“假”类型的模拟

如果您尝试设置this.isSimulation为,false您会收到一些奇怪的错误,显示客户端插入开始引发插入错误。

我不太确定如何在虚假模拟中运行它。我认为您必须以其他方法var dothis = function() {...}类型的方法运行它。

要做到这一点,“假火”并忘记并仅拥有客户端数据,这是我的假设(如果我错了,请更正,因此我会更改答案)修改_collection客户端方法中的属性。

例如,如果你有

mydata = new Meteor.Collection("something");

function something() {
    mydata.insert({..});
}

修改方法来执行此操作

mydata._collection.insert({..});

这将确保数据不会同步到服务器,但会使本地集合具有此“假数据”。

希望这可以帮助!

于 2013-10-22T20:51:32.950 回答