我正在尝试找出一种创建使用 Meteor 应用程序的教程的好方法。从视觉上看,我想出了一个好方法,并将其打包成一个智能包:
然而,还有第二个部分是相当难以弄清楚的。
在许多情况下,教程应用程序需要加载虚假数据,以向用户展示界面,而不需要填充可能难以生成的真实数据。(例如,请参阅https://www.planapple.com/trip/demo/349/这是 PlanApple 的演示)。在 Meteor 中,由于应用程序的内容基本上是由一些集合的内容定义的,所以我看到了两种方法:
- 维护两组集合,一组用于教程,一组用于实际应用。在教程中使用第一组,在用户实际使用应用程序时使用第二组。
- 使用一组集合,并在教程期间使用订阅填充虚假数据,并在用户使用不同订阅实际使用应用程序时填充真实数据。
第一种方法显然不好。这意味着一个人不能在不知道它是否被用作教程的情况下编写应用程序,并且if/else
在呈现应用程序时存在很多不必要的混乱反应逻辑。此外,如果应用程序有多个集合,这将很难维护。
第二种方法似乎是更流星式的做事方式。我们基本上想要的是服务器发布用一些假数据填充所有客户端集合,然后允许在客户端以任何方式操作数据,而不会将更改传播到服务器;客户端基本上获取服务器教程数据的副本,然后仅对其进行本地更改,然后将其丢弃。这归结为两件事:
通过自定义订阅将虚假数据从服务器发送到客户端,并将其发送到与常规应用程序相同的命名集合中。正如我在 https://stackoverflow.com/a/18880927/586086中所写,这绝对是可能的
在初始加载数据后忽略来自客户端(在服务器上)的任何插入、更新和删除;但允许它们在本地发生。如果创建空(未命名)集合,这也是可能的,如http://docs.meteor.com/#meteor_collection。
问题是,尽管可以分别执行上述两个步骤中的每一个,但我想同时执行这两个步骤 - 我希望将数据加载到与客户端使用真实数据相同的命名集合中,以避免复杂的拥有两组集合的控制逻辑,但我也希望更改仅限于本地,但在教程期间不会通过订阅传播回来。
有人对如何做到这一点有想法吗?
关于第二部分是否可行的一个相关问题:Meteor 数据库修改器如何知道它是从 Meteor.method 还是普通代码中调用的?
编辑:似乎我们在本教程中基本上想要做的是直接插入本地流星集合,如{ https://stackoverflow.com/a/19523301/586086 }。但是,有没有一种方法可以在教程中为所有相关的 mutators 通常打开这种行为,而不是显式地指定这个?