基于backbone.js的许多框架在现实世界中的优缺点是什么?

基于backbone.js的许多框架在现实世界中的优缺点是什么?,backbone.js,javascript-framework,Backbone.js,Javascript Framework,希望有人能与一些最新出现的backbone.js变体分享他们的经验。 我在多个项目中具有主干线/下划线/require方面的良好经验,我希望采取下一步行动,为复杂的应用程序结构提供更高级的解决方案 我知道可以使用以下框架: , 也许我错过了一些 这里有一个关于差异的简短介绍: 但这是非常普遍的。我想知道是否有人可以使用这些框架与现实生活中的应用程序分享他们的经验 选择其中一个的好处是什么?什么时候木偶会比卓别林更好,或者为什么vetebrae更适合某些应用,例如

希望有人能与一些最新出现的backbone.js变体分享他们的经验。 我在多个项目中具有主干线/下划线/require方面的良好经验,我希望采取下一步行动,为复杂的应用程序结构提供更高级的解决方案

我知道可以使用以下框架:

  • ,
也许我错过了一些

这里有一个关于差异的简短介绍:

但这是非常普遍的。我想知道是否有人可以使用这些框架与现实生活中的应用程序分享他们的经验

选择其中一个的好处是什么?什么时候木偶会比卓别林更好,或者为什么vetebrae更适合某些应用,例如

当然,显而易见的答案是“使用最适合您需求的方法”,但我缺乏使用这些框架的经验,无法了解它们的优势/目的/优势或首选方案

谢谢

编辑1: 找到此帖子:

编辑2: 马蒂亚斯·谢弗(卓别林)通过邮件回答:

简而言之,当前的结构接近1.0版,因为它已经在生产中使用。在1.0版本之前,我们不打算添加新的大功能或打破API的变化

木偶无疑是最全面和稳定的图书馆了。它解决了JS应用程序开发的几个方面。例如,它有一个强大的视图层,而主干本身则完全是空的。当然,你会发现有些方面不能满足你的需求,你可能会觉得有必要围绕木偶建立一个结构

相比之下,卓别林专注于主干应用程序的一个相当小但非常重要的方面,即整个应用程序结构和模块生命周期。在这方面,卓别林非常有见解,更像是一个框架而不是一个库(就像“你的代码调用库,一个框架调用你的代码”)。卓别林提供了一些中心类,它们位于单个应用程序模块之上,控制整个应用程序状态。这为你的应用程序提供了一个传统的结构,比如RubyonRails

在卓别林中,您声明了一些映射到控制器的路由,一旦路由匹配,卓别林就会启动控制器。它还负责旧控制器的处理,以及控制器应该创建的主视图的显示和隐藏。这是一个基本的想法,但卓别林处理了丑陋的细节,使这一切顺利进行

这种结构有两个原则: -模块化、解耦和沙箱 -使用发布/订阅和中介进行跨模块通信

当然,这些模式在软件开发领域并不新鲜,卓别林并不是唯一一个将它们应用于Backbone.js应用程序的库


卓别林还为视图层提供了增强功能,例如高度复杂的CollectionView,但总的来说,其区域和布局不如木偶。但是使用卓别林视图提供的方法编写这样的元类相对容易。

我目前正在使用带有布局管理器模块和把手的主干作为模板引擎,我发现使用已经存在的Grails后端设置一个小应用程序非常容易。在开始使用布局管理器之前,我读过关于木偶和卓别林的书,在我看来,这两个版本都非常强大,但很复杂。然后我想起了我最初选择backbone.js的原因:简单。所有这些框架都在添加主干设计中遗漏的内容。我并不是说框架不好,但如果我需要更复杂的东西,我会尝试其他项目,比如ember.js或sproutcore,因为它们有一个独特的代码库,在开发人员的心目中有一个目标。在这里,我们在另一个框架之上有一些框架。当然,主干网是一个主干网,不仅用于构建应用程序,还用于编写一些更强大的库,但我认为它唯一的缺点是视图层,因为它缺少布局管理器和嵌套视图的可能性。通过布局管理器,这一差距得到了很好的填补


因此,我对您的问题的回答是:从按原样使用主干开始,问问自己缺少什么,以及您对框架的期望是什么。如果您发现主干遗漏了太多内容,那么在其他框架中搜索它们,并选择最符合您需要的框架。如果您仍然对选择没有信心,那么主干网可能不适合您,您必须寻找其他解决方案(ember.js、sproutcore、ExtJs、JavaScript-MVC都不错)。如果你有编写客户端应用程序的经验,那么你并不需要在所有框架上都有经验才能选择正确的框架(当然是对你而言)

我研究了使用Backbone.js构建的各种框架,并为HauteLook的一个项目构建了脊椎。项目目标包括。。。动态脚本加载、AMD模块格式、依赖关系管理、使用大部分开源库进行构建、在包中组织代码、为一个或多个单页应用程序进行优化和构建、在完全缓存的服务器上托管,例如,不使用服务器端脚本(仅使用数据API)和funnest(对我而言),在项目中使用行为驱动开发。有关该项目的说明,请访问:

我们的问题:

所选库(jQuery、下划线.js、Backbone.js、RequireJS、Mustache)提供模块加载、依赖关系管理、应用程序结构(用于模型、集合、视图和路由)、与API的异步交互、各种实用程序和对象

MyApp = new Backbone.Marionette.Application();

MyApp.module("MyModule", function(MyModule, MyApp, Backbone, Marionette, $, _){

  // your module code goes here

});

MyApp.addRegions({
  someRegion: "#some-div"
});

MyApp.someRegion.show(new MyView());

Backbone.Marionette.Renderer.render = function(template, data){
  return template(data);
};