this.isSimulation的定义:
Access inside a method invocation. Boolean value, true if this invocation is a stub.
Meteor.isClient的定义:
Boolean variable. True if running in client environment.
在什么情况下this.isSimulation会有用?为什么我不能一直只使用Meteor.isClient?
我正在使用Meteor.isClient检查客户端文档是否与使用此简单架构属性的服务器同步:
unsynced: {
type: Boolean,
autoValue: function () {
return Meteor.isClient;
}
}
它似乎正在起作用,但是其他人说使用this.isSimulation,除了这样做不适合我。
答案 0 :(得分:7)
我正在接受Slava的评论并将其转化为答案;)
这个想法是isSimulation
可能在服务器或客户端的任何地方变为真。它仅在Method
上下文中有用。正如Slava所说,当服务器充当另一台服务器的客户端时,可以使用模拟。
isClient
可用于各种代码,而不仅仅是Method
内部。它可以防止代码在可能引发错误的环境中执行(例如在服务器上使用Session
)。
对于延迟补偿,您经常在客户端和服务器上运行相同的方法,但如果您将数据插入数据库,显然客户端只能模拟这一点。因此,有时确定模拟是否正在运行或数据库是否实际更改是有帮助的。
在您的情况下,您可能需要调整方法以检查服务器是否保存文档更加健壮。为此,我会在方法中添加isServer
块,以便将标记synced
设置为true
,并在客户端更改数据时将其设置为false
。理想情况下,它与成功的更新/ upsert耦合。