2

我有几个不同的视图(客户端代码),我需要插入/更新我的集合。我不想让重复的代码处理插入/更新,而是将其提取到一个单独的文件中,该文件的功能可全局访问。

我已经看到了几个使用构造 Meteor.methods 完成此操作的示例。不是所有 Meteor.methods 都在服务器上执行吗?这对延迟补偿有何影响?有一个更好的方法吗?或者这是目前可以接受的方式来实现这一点?

4

2 回答 2

3

我会将它们放在一个方法中,但将该方法公开给客户端。换句话说,不要把它放在server目录中,也不要用if (Meteor.isServer). collections我更喜欢在客户端和服务器都加载的目录中定义我的所有集合及其方法。如果客户端有一个方法的定义,这称为存根。有了这些信息,我鼓励您重新阅读文档的方法部分。简短的版本是由于延迟补偿,代码将在客户端和服务器上并行运行。您可以通过在定义中添加一个 simple 来验证这一点console.log(它会在调用时打印到浏览器控制台和命令控制台)。要更花哨地使用存根,您可以看到这个视频。

于 2013-02-13T02:53:49.233 回答
2

在我这边,我使用以下结构:

/common/collections/[each collection gets a file where it is defined]
/common/models/[each collection gets a model file where the model is defined]

这样我就可以在客户端和服务器上尽可能多地重用代码

我使用 CoffeeScript 来创建类,但你可以用纯 Javascript 做同样的事情。

我的模型构造函数接受属性散列(meteor object),然后它可以封装我的方法。

OffTopic #1:作为奖励,我的模型扩展了一个我命名为“MeteorModel”的超级对象,我在其中放置了模型之间的共享代码。

OffTopic #2:我还将允许和拒绝逻辑放在这些模型中,以便我可以从客户端或服务器端执行任意验证。非常有用,因为我还没有找到更好的方法来模拟对象修改而无需在普通 Meteor 中实际修改它。

I prefer not to work directly with Meteor.Collections and write my code on the side as it is still unclear how Meteor will evolve and I want room to changed my approach when it does.

于 2013-02-13T13:29:32.460 回答