2012-08-12 78 views
1

我想了解有关requireJS的更多信息。所以,如果我理解正确,那么下面的代码应该是合法的。这是使我的应用程序模块化的正确方法吗?requireJS中的Backbone.js + underscore.js + jQuery ...这是正确的方法吗?

这是application.js,其中data-main属性点:

requirejs.config({ 
    baseUrl: 'scripts/vendor', // By default, load all from vendor folder 
    shim: { 
     'backbone' : { // Do not support module loading 
      deps: ['underscore', 'jquery'], // Do not support module loading 
      exports: 'Backbone' 
     }, 
    }, 
    paths: { 
     models: '../application/models', // Load from this folder if starts with user 
     views: '../application/views', // As above... 
    } 
}); 

requirejs(['jquery', 'backbone', 'views/user'], function($, Backbone, UserView) { 
}); 

而我的看法/模型(相当无用现在)模块:

文件application/views/user.js

// underscore should be loaded now 
define(['jquery', 'backbone', 'models/user'], function($, Backbone, User) { 
    return Backbone.View.extend({ 
     model: User, 

     el: $('tr'),  

     initialize: function() {} 
    }); 
}); 

文件application/models/user.js

define(['backbone'], function(Backbone) { // underscore should be loaded now 
    return Backbone.Model.extend({ 
    }); 
}); 
+0

define(['jquery','backbone','models/user'],function($,Backbone,User){means?在JavaScript中工作? – 2015-01-06 18:52:16

回答

5

您还需要填充下划线,因为它不是AMD兼容的。

underscore: { 
    exports: '_' 
} 

我建议寻找到https://github.com/tbranyen/backbone-boilerplate/,因为它需要很多的头痛出使用RequireJS的。

+0

噢,谢谢。为什么jquery不应该在shim之下? – gremo 2012-08-12 16:46:01

+1

jQuery已经与AMD兼容。Shim适用于不支持AMD的库。 – tbranyen 2012-08-12 17:09:23

1

使用lodash代替下划线,是一款出色的全兼容解决方案,并支持AMD负载。检查基准和文档;)

requirejs.config({ 
    appDir: ".", 
    baseUrl: "js", 
    paths: { 
     'jquery': ['//ajax.googleapis.com/ajax/libs/jquery/1.8.2/jquery.min','libs/jquery-min'], 
     'lodash': 'libs/lodash.min', 
     'backbone': 'libs/backbone.min', 
    }, 
    shim: { 
     'backbone': {deps:['lodash','jquery'], exports: 'Backbone'} 
    } 
}); 

require([ 
    'jquery', 'lodash','backbone' 
], 
function($, _){ 
    return {}; 
}); 
相关问题