我在互联网上看了很多例子如何用requireJS开始开发BB应用程序,但我有点迷失。
我认为AMD的目标是只在真正需要时加载文件。不久。
为什么我只看到开发人员将几乎所有文件都作为依赖项放在他/她主文件开头的示例?
这是一个例子: https://github.com/jcreamer898/RequireJS-Backbone-Starter/tree/master/js
这个应用程序立即加载main.js,这取决于app.js加载router / home.js,这需要view / view.js加载视图的模板和models / model.js ......并结束。
我无法看到如何扩展此应用程序,例如更多视图,其中视图的依赖项(其模型,模板,集合,第三方API等)仅在路由器调用和初始化时加载。其他方式,在初始化应用程序时加载所有文件时使用AMD是无稽之谈。
此处类似的例子: http://backbonetutorials.com/organizing-backbone-using-modules/ 看看router.js文件。实际上它加载了'views / projects / list'和'views / users / list'依赖关系,而路由器还不知道用户将来是否需要它们。
请提前告知,谢谢!
答案 0 :(得分:6)
在这么小的示例应用程序中有点难以看到,因为你必须在初始路由上加载某些东西,而在Backbone中加载某些东西通常意味着一个模型,集合和视图。由于你链接的样本只有一个,所以是的,你几乎加载了所有东西。
在哪里开始看到“按需”功能,您可以在其中添加其他路线/视图/模型/等。但请记住,按需加载可能是AMD / RequireJS的次要目标。主要目标是modularity。然后,他们为您提供了许多选项,可以根据需要加载内容,也可以通过the optimizer
捆绑所有内容此外,没有任何内容表明您必须将所有require()放在文件的开头。您可以稍后执行此操作(例如,在启动路线时)。这是您第一个链接示例中home.js的修改版本。如果您使用的是Chrome开发工具,则可以在“调试器”中查看网络选项卡。声明暂停执行。然后继续执行并查看其余脚本是如何加载的。
define([
'jquery',
'backbone',
'underscore'
],
function($, Backbone, _){
var Router = Backbone.Router.extend({
initialize: function(){
Backbone.history.start();
},
routes: {
'': 'home'
},
'home': function(){
debugger;
require(['views/view'], function (mainView) {
mainView.render();
});
}
});
return Router;
});
有关更多背景信息,请参阅this person's article以及下一步可以使用的地方。