首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Backbone应用程序使用requirejs的模式

Backbone应用程序使用requirejs的模式
EN

Stack Overflow用户
提问于 2012-07-09 00:11:02
回答 1查看 761关注 0票数 1

我在this article上遇到了一些关于backbone应用程序的问题。有一件事看起来真的很奇怪。每当他们需要在我的模块中引用Backbone,Underscore或jquery时,我必须要求他们:

代码语言:javascript
复制
define([
  'jQuery',
  'Underscore',
  'Backbone',
  'collections/projects',
], function($, _, Backbone, ProjectsCollection, projectsListTemplate){
  var projectListView = Backbone.View.extend({
    el: $("#container"),
...

那么,真的有必要走这条路吗?是不是有点过于工程化了?难道我不能在启动应用程序之前加载Backbone和它的依赖项,并将它们用作全局对象吗?还是错过了这里的一些东西?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2012-07-09 02:24:16

无论哪种方式都有利弊之分。

优势:

您的依赖项管理完全由require.js控制,而不是依赖于同步加载的全局作用域库。它是优雅的,模块化的,可能是做事情的正确方式。

优势:

更容易在不同版本的库中进行交换,特别是在每个模块中。老实说,我从来没有在实践中看到过这种情况--这似乎是一种“假设”的情况,而不是一些实际的情况。如果你这样做了,那么你很可能是在一起修改一些东西,牺牲了你通过将它们作为模块使用而获得的“代码优雅”。

缺点:

你会得到很多样板导入。

代码语言:javascript
复制
define(['jQuery', 'underscore', 'backbone', 'raphael', ...],

在一个大型应用程序中,可能需要六个库依赖项才能达到依赖项。在每个模块中。

对于主干繁重的应用程序来说,冗余显得尤其不必要,因为每个模块都可能定义一个主干模型/控制器/视图-几乎每个模块都需要主干。

您可以将它们都封装到一个引用Lib.$(...)Lib._(...)Lib模块中,但这只是将样板从导入中移出并放入代码中。它也否定了优势#2。

那么是哪一个呢?

我要说的是,让分别查看每个库,,并决定它是应该是全局的还是它自己的导入模块。

如果你打算在几乎所有地方(例如jQuery、Backbone)都使用这个库,那么就让它保持全局。

对于其他库,您可能只在几个视图中使用它们(例如Raphael.js)。在这种情况下,将其作为模块导入。

票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/11384629

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档