1

在我的应用程序中,我将方法放在客户端和服务器之间的共享位置。这种方式正如meteor docs中所建议的,方法机制负责乐观的UI。

但我刚刚在 David Weldon博客中读到了关于两层实现的内容,这对我来说很有意义。

问题是如何通过两层实现实现乐观 UI。

  1. 将方法移动到服务器,在模板事件中更新 clientDB 以获取乐观 UI,并拒绝从客户端到 DB 的所有更新。

  2. 有什么方法可以在客户端使用,但只能从另一个方法调用?

任何建议的方法将不胜感激。

4

1 回答 1

1

我认为重要的是拒绝客户端插入/更新。一旦完成,您就可以从客户端运行第二层代码,它实际上不会做任何事情,因为它会被拒绝。

以下是支持该观点的https://www.discovermeteor.com/blog/meteor-pattern-two-tiered-methods/中的几段:

客户端服务器

虽然我说过 postSubmit 函数主要期望在服务器上运行,但它会在两种情况下运行在客户端上。

首先,当从 postSubmit 方法调用作为该方法的客户端模拟的一部分时。在这种情况下,Meteor 将执行模拟,将 post 插入客户端数据库,然后最终触发服务器端 postSubmit 方法调用。

另一个用例是有人直接从浏览器控制台调用 postSubmit 函数。如果发生这种情况, Posts.insert() 调用将失败,因为我们不允许客户端插入,并且不会发生任何事情。

请注意,允许/拒绝不会影响从 Meteor 方法中执行的代码,这就是即使您没有声明允许/拒绝策略,模拟也不会失败的原因。

所以换句话说,答案#1:将方法保存在一个公共位置并删除不安全的包(流星删除不安全)

对 #2 的回答:是否在方法之外调用它们并不重要,因为它们将被拒绝。

于 2016-03-12T12:11:15.713 回答