2014-01-10 65 views

回答

2

据我所知:你没有。让他们读取相同数据的唯一方法是将它放在某处,以便他们都可以读取它们。因为这两个require()函数都放在一个普通的JavaScript文件中,它们共享的唯一范围是全局范围。

另一种可能性是将它传递给require()的回调函数,但这意味着您必须编写一个返回数据的“模块”(或使用dojo/text插件以只读方式读取文件)。

根本不建议有两个require()声明。如果我们仍然在讨论同一个秒表(我已经读了一下你的代码),你应该把所有的事件处理程序放在一个require()块中。然后你可以把他们两个都需要的数据放在require()块内,他们都可以读取它。

一些原因有多个require()块是没有益处的:

  • 难读/维持:如果您有多个require()块,这是令人困惑的。大多数人不会反正使用它(推荐与否)。
  • 更多副本:如果您使用的公用模块如dojo/querydojo/dom,则必须每次将它们添加到模块列表中。我不认为它会下载这个文件两次,但它更多的是写/维护。
  • 范围问题:正如您刚刚注意到的,当多个require()块需要访问相同的数据时,您将遇到类似的范围问题。这意味着你必须把它们放在全局范围内(这是另一个不好的做法),只用简单的数据编写一个模块(不是很有用),或者你必须将它们都包装在一个函数中,你必须手动执行(混淆)
  • 分离问题:如果您有合适的理由将它们分开,您应该将它们分成模块。
+0

为什么不建议有两个'require()'语句? –

+1

由于这样的原因,因为读起来很混乱,所以你需要写很多重复的东西(比如像'dojo/query'这样的常见模块导入),难以维护,而且最重要的是如果你的设计中有一些错误想要这样做。如果你单独使用require()块,我想你有理由把它们分开,如果你有一个合理的理由,你应该定义一个单独的模块。 – g00glen00b

+0

Gotcha。我合并了3个'require'块http://jsfiddle.net/P7b9S/32/ –

相关问题