gpt4 book ai didi

javascript - 如何使用 Meteor.startup 修复文件加载顺序问题?

转载 作者:行者123 更新时间:2023-11-29 19:44:10 25 4
gpt4 key购买 nike

互联网上的许多资源(包括此处)建议使用 Meteor.startup修复由 JS 文件加载顺序引起的依赖性问题。然而,没有人详细说明这是如何实现的。

具体来说,似乎文件顺序依赖性是我无法让我的 posts.coffee 集合识别我的 permissions.coffee 中定义的权限的原因。我认为这是因为 posts.coffee 在/lib/collections 中,而 permissions.coffee 在/lib 中,子目录中的文件首先被加载。 (顺便说一句,我更希望/collections 位于根目录中,但我之前不得不将其移动到/lib 中以解决类似的问题。)

这是我的帖子。咖啡:

@Posts = new Meteor.Collection('posts')

Posts.allow(
update: ownsDocument
remove: ownsDocument
)

Meteor.methods(
...

这是我的权限。咖啡:

@ownsDocument = (userId, doc)->
doc && doc.userId == userId

(顺便说一句,这全部来自“发现 meteor ”一书教程,关于 these commits,CoffeeScript 除外。)

我的问题:假设我对问题的分析是正确的,你将如何使用Meteor.startup 来解决它? This answer我很难解释;一种解释是我应该以某种方式将 Posts.allow(...) 包装在 Meteor.startup 中,但这看起来真的很笨拙。也许我错了,但似乎应该有一个包含所有必要启动代码的通用/配置文件,而特定的 Controller 应该对它一无所知。

顺便说一句,我意识到我可以通过利用 Meteor 的默认文件加载顺序规则(例如/lib 优先;子目录优先;main.* 最后;按字母顺序排列)来破解解决方案,但对于应该是简单的问题。我不想在文件名前附加“a”或创建虚假目录只是为了让它在另一个文件之前加载。

最后一点:我正在使用 CoffeeScript,我想知道 CS 处理全局范围的方式是否与它有关。 (例如,不是将我的 Posts 集合定义为没有 var 关键字的 JS 变量,在 CS 中我必须定义为 @Posts,我相信这使它成为窗口的属性。)

最佳答案

是的,你就是这样做的:

Meteor.startup ->
Posts.allow(
...
)

基本上,任何使用在另一个文件中定义的变量的代码都应该在 Meteor.startup -> 之前,除非你确定加载顺序是正确的(变量在 lib ,例如)。

是的,加载顺序选择不当。

关于javascript - 如何使用 Meteor.startup 修复文件加载顺序问题?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21035915/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com