requireJS与Backbone依赖

时间:2012-07-15 01:28:40

标签: jquery backbone.js requirejs

我正在使用requireJS构建网站。

这是我第一次使用requireJS。

我在main.js中配置了requireJS路径:

require.config({
  paths: {
    'jquery': 'libs/jquery/1.7.2/jquery',
    'underscore': 'libs/underscore/1.3.3-amdjs/underscore', // AMD support
    'backbone': 'libs/backbone/0.9.2-amdjs/backbone', // AMD support
    'marionette': 'libs/marionette/0.9.3-amd/backbone.marionette', // AMD support
    'templates': '../templates'
}
});

在我正在使用的模型,视图,集合中;

define([    
'jquery',
'backbone'
], function ($) {
    var Geo = Backbone.Model.extend({});

    return Geo;
});

我不清楚的是:为什么我要继续定义jquery&骨干作为依赖。 我的意思是这个项目和模型永远不会在没有jquery / backbone的情况下运行。

那么为什么不将jquery和backbone添加到index.html作为脚本标记,并在每个对象中保存引用它们。我知道它会污染全局命名空间但不合理吗?

任何建议。

欢呼声,

4 个答案:

答案 0 :(得分:2)

@Guy,定义它们是可选的,但是如果你想保持一致,那就比你做得好。这是Require.JS建议的架构。这并不意味着每次将它们定义为deps时都会尝试加载jQuery或Backbone。

此外,在您的示例中,您不需要在回调$参数中使用function()。 jQuery和$已经在窗口中了。

define([    
'jquery',
'backbone'
], function ($) {
    var Geo = Backbone.Model.extend({});

    return Geo;
});

另外,在生产中,因为我们有时会使用很多依赖项,所以我们这样做:每次在依赖项中列出require然后显式分配变量,因为某些依赖项没有AMD支持并且不回报你的期望:

define([    
  'require'
  'moduleA',
  'moduleB'
], function (require) {
    var moduleA = require('moduleA'),
        moduleB = require('moduleB');

    /* code */
    return;
});

答案 1 :(得分:0)

我认为你的理解是正确的,因为jQuery无处不在,将在index.html页面上用作全局引用,完全在我的项目中,我这样做。

答案 2 :(得分:0)

如果您使用r.js优化项目,我认为在RequireJS中添加每个js文件非常有用。

答案 3 :(得分:0)

如果您创建模块A和B并希望将它们放入另一个项目中,则明确声明依赖项。如果另一个项目只使用没有jQuery的ExtJS怎么办?或者如果他们使用zepto而你特别需要jquery的库呢?只需为jquery添加一个配置即可......并且在需要时将加载jquery。

您不能依赖公共库的存在。将模块包装在requirejs shell中可以保证库的依赖关系存在。而且它的速度要快一点:) http://jsperf.com/requirejs-include-faster(好吧。显然除了ie ..去图)

此外,除非您实际使用jquery,否则您不必要求它。你为什么要在骨干模型中使用?即使在一个视图中,你也可以使用这个。$ el,它会让一个jquery对象回过头去 - 这个。$ el.find('。someclass')