2

我正在尝试找出一种创建使用 Meteor 应用程序的教程的好方法。从视觉上看,我想出了一个好方法,并将其打包成一个智能包:

https://github.com/mizzao/meteor-tutorials

然而,还有第二个部分是相当难以弄清楚的。

在许多情况下,教程应用程序需要加载虚假数据,以向用户展示界面,而不需要填充可能难以生成的真实数据。(例如,请参阅https://www.planapple.com/trip/demo/349/这是 PlanApple 的演示)。在 Meteor 中,由于应用程序的内容基本上是由一些集合的内容定义的,所以我看到了两种方法:

  1. 维护两组集合,一组用于教程,一组用于实际应用。在教程中使用第一组,在用户实际使用应用程序时使用第二组。
  2. 使用一组集合,并在教程期间使用订阅填充虚假数据,并在用户使用不同订阅实际使用应用程序时填充真实数据。

第一种方法显然不好。这意味着一个人不能在不知道它是否被用作教程的情况下编写应用程序,并且if/else在呈现应用程序时存在很多不必要的混乱反应逻辑。此外,如果应用程序有多个集合,这将很难维护。

第二种方法似乎是更流星式的做事方式。我们基本上想要的是服务器发布用一些假数据填充所有客户端集合,然后允许在客户端以任何方式操作数据,而不会将更改传播到服务器;客户端基本上获取服务器教程数据的副本,然后仅对其进行本地更改,然后将其丢弃。这归结为两件事:

问题是,尽管可以分别执行上述两个步骤中的每一个,但我想同时执行这两个步骤 - 我希望将数据加载到与客户端使用真实数据相同的命名集合中,以避免复杂的拥有两组集合的控制逻辑,但我也希望更改仅限于本地,但在教程期间不会通过订阅传播回来。

有人对如何做到这一点有想法吗?

关于第二部分是否可行的一个相关问题:Meteor 数据库修改器如何知道它是从 Meteor.method 还是普通代码中调用的?

编辑:似乎我们在本教程中基本上想要做的是直接插入本地流星集合,如{ https://stackoverflow.com/a/19523301/586086 }。但是,有没有一种方法可以在教程中为所有相关的 mutators 通常打开这种行为,而不是显式地指定这个?

4

1 回答 1

0

我最终自己使用partitioner包实现了这一点,它允许将连接的客户端分成不同的切片,每个切片包含不同的数据。

基本上,这个想法是当他们在教程中时将用户放入一个新的分区,然后当他们真正使用应用程序时将他们放入另一个分区。也适用于教程包。这放弃了将更改更改为客户端本地的能力,但是存储教程数据并没有太多开销,并且无论如何在我的情况下都是有用的。

执行此操作的应用程序示例是https://github.com/mizzao/CrowdMapper

于 2014-06-24T15:50:18.947 回答