为什么在Backbone / Require.js项目中的每个JS文件中都包含jQuery和下划线

时间:2014-01-08 05:26:45

标签: javascript jquery backbone.js requirejs underscore.js

在几乎每个Backbone / Require.js项目中,您都会看到与此类似的模型和视图:

define([
    'jquery',
    'underscore',
    'backbone'
], function ($, _, Backbone) {
    //Some code goes here, perhaps a Backbone model or view
});

但是,假设您正确设置了Require.js填充程序(使用Backbone填充程序包括deps: ["underscore", "jquery"]之类的东西),您只需要定义Backbone - 将Backbone定义为依赖项隐式地将jQuery和Underscore定义为依赖项还有!因此这也是正确的:

define([
    'backbone'
], function (Backbone) {
    //Some code goes here, perhaps a Backbone model or view
});

就个人而言,我会在一个明确使用它们的函数的文件中定义jQuery或Underscore - 但是像一个简单的简洁的Backbone模型文件,它们看起来像是残酷的。

为什么我经常看到多余的jQuery和Underscore定义的模式?为什么这成为一个毫无疑问的最佳实践?

2 个答案:

答案 0 :(得分:3)

当你没有明确地将它们作为模块中的变量需要时,将Underscore和jQuery声明为依赖项不会起任何作用(即,这不是最佳实践)。正如你在问题中所说的那样

  

就个人而言,我会在一个文件中定义jQuery或Underscore   明确地使用了他们的功能 - 但是在简单的事情中   简洁的Backbone模型文件,它们看起来像是残酷的。

此外,你甚至可以在某些情况下摆脱它们:

答案 1 :(得分:1)

这只是因为避免使用全局变量。当然,您可以跳过定义jQuery和下划线,但在这种情况下$_将引用全局变量。如果您创建自己的应用程序并使用单个版本的jQuery - 它不会出现案例问题,但如果您的应用程序已经包含很少的不同库版本 - 最好遵循您不喜欢的练习:)