Backbone JS强烈建议您使用jQuery。但是,它没有做jQuery的事情。例如,jQuery消除了新运算符的必要性,骨干网大量使用它。
另一方面,我正在寻找一个更基于原型继承而不是经典继承(新)的框架。 jQuery不属于这一类,这只是我倾向于的架构风格。
是否有任何使用原型继承的框架,或者它是否会推出自己的桥模式?
答案 0 :(得分:12)
Backbone和jQuery解决了不同的问题... Backbone本质上为您提供了一个结构,以便使Javascript繁重的应用程序......它为您提供模型,集合,视图和控制器(尽管,仅基于玩它的一天) ,我觉得控制器用于路由,并且视图有点像经典控制器)
Backbone依赖于jQuery(或Zepto,如果你倾向于这样)来帮助它做像AJAX请求这样的事情。
你是对的 - 它不是很像jQuery,但它为你提供了一些非常不同的东西......
<强>更新强>
从版本0.5.0开始,骨干网已将控制器重命名为路由器,这对于来自MS MVC / Rails等的人来说应该会更加明显......
“我们借此机会澄清了0.5.0版本的一些命名。控制器现在是路由器”
答案 1 :(得分:4)
我完全同意保罗提供的答案,并且还想重申一下,你的问题在其基本要素中含糊不清。
Jquery是以高度为中心的,为您提供了在DOM上运行的出色设施。无论是改变样式,将远程内容加载到文档的某些部分,响应浏览器事件......(几乎)所有内容都集中在DOM上。对于这种功能,您在文档内容上操作,原型继承以及更重要的通过DOM访问小部件的方式(查看JQueryUI的API)工作得相当好。如果您将小部件识别为javascript对象,那么您还必须跟踪对象...在编程风格后面跟着JQueryUI等,您不必这样做,因为您可以访问存在于其中的任何小部件。 DOM通过浏览DOM结构或简单地通过其id(基本上充当元素的全局标识符)。
backbone.js完全是为了不同的目的而构建的。引言清楚地表明,它建立在将数据绑定到DOM上的基本理念之上。 当您构建一个按backbone.js约定构建的应用程序时,您基本上总是专注于javascript对象,这些对象可能以某种方式链接到DOM。 您正在定义与服务器数据源接口的模型,在操作数据内容时触发事件的模型,帮助您管理大型数据集的集合......无论如何,您始终在未硬连接到Document结构的javascript对象上运行。对于这种情况,通常考虑传统的面向对象模型。 一旦你有了一个对象,工作流程与你习惯使用jQuery的工作流程没什么不同,因为骨干也就像jQuery一样,提倡观察者模式。 因此,与使用JQuery将事件处理程序绑定到DOM元素的方式相同,您可以将事件处理程序附加到由模型,收集器等分派的自定义事件。因此,两者合并得很好。
就其他框架而言,您可能想要检查提供数据绑定和可观察等的Knockout,并且不要求您使用new关键字来创建实例,而是通过调用ko命名空间中的函数来创建实例。吸引你的口味。 KO拥有丰富的文档和代码示例,您可以通过它们来确定它是否符合您的口味。我不能对KO做更多的评论,因为我对它的了解有限,但就backbone.js而言,我强烈建议你不要因为你不喜欢某些事情的实现方式而忽视框架。它优雅而稳健地完成了应有的工作,并保持了极小的占地面积。
答案 2 :(得分:2)
我认为您对原型继承的误解以及您在框架中实际需要的内容感到困惑。如果您正在修改原型但从不使用new
关键字,那么您永远不会创建新对象。如果您正在寻找一个框架来抽象出对象创建,那么这是另一个主题,尽管您不应该害怕使用new
关键字;它是JavaScript的重要组成部分。
你实际上可以在jQuery中使用new
语法,当你不使用它时,jQuery实际上会再次使用new
语法以及传递给它的参数来回忆自己。这是纯粹的语法糖,对任何事情都没有什么区别。
“另一方面,我正在寻找一个更基于原型继承而不是经典继承(新)的框架。”
Backbone是通过内置于所有模型,集合和视图中的方法extend
构建的原型继承。这是非常无问题且更容易使用的,并添加了诸如super
之类的东西 - 一个钩子到父母的原型中 - 这对于简单的JS原型设计来说可能更难做到。
答案 3 :(得分:1)
Backbone.js为ajax驱动的网络应用程序带来了编码标准,无需刷新页面即可提供数据。
jQuery带来了一套工具,可以帮助您完成基本的工作,而无需担心您运行代码的浏览器。
他们没有任何共同之处。这就像将锤子(jQuery)与工具箱(backbone.js)进行比较。锤子只是工具箱的一部分,而不是相反。
所以,是的! Backbone.js与jQuery不同。
答案 4 :(得分:1)
“我正在寻找一个更基于原型的框架 继承比经典继承新的运算符“。
Javascript上没有'经典'继承。实际上除了使用'new'之外没有其他标准的原型方法可能jQuery只提供了一种在内部使用'new'的方法。
var jQuery = function( selector, context ) {
// The jQuery object is actually just the init constructor 'enhanced'
return new jQuery.fn.init( selector, context, rootjQuery );
},