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