jQuery与Yahoo UI API设计

时间:2010-01-04 16:34:23

标签: javascript jquery yui

我对jQuery和Yahoo UI API之间的设计差异感到困惑。免责声明:我非常不喜欢jQuery api,但我对网络编程和javascript一般都是一个无知的人,所以我可能会出错,并回到这里乞求兑换。这么久......

我的问题如下。这两种设计是不同的。 jQuery将DOM置于中心,并通过在其上执行“触发器”增强器方法来装饰DOM。示例

$("#flexigrid").flexigrid()

jQuery的一个要求是,在某些情况下,您必须事先遵循一个非常特定的传统结构。示例:

<div id="accordion">
    <h3><a href="#">First header</a></h3>
    <div>First content</div>
    <h3><a href="#">Second header</a></h3>
    <div>Second content</div>
</div>

然后

$("#accordion").accordion();

此外,返回的实体通常不提供任何通过方便的编程方法隐藏DOM的机制。要操纵您的jQuery实体,您必须通过选择器访问DOM,在某些情况下访问不能保证很容易知道,就像内部生成的ID一样。假设你想以编程方式交换手风琴,你做的是

$('#accordion').accordion('option', 'active', 2);

而不是更直观的

myAccordion.setActiveTab(2);

另一方面,雅虎ui专注于javascript对象,你创建它们传递DOM节点选择器(例如myDataTable = new YAHOO.widget.DataTable("container_id")),然后通过对象方法执行所有操作。想要添加新行吗?致电myDataTable.addRow()。 DOM是隐藏的。你并不关心幕后发生的事情。

现在,我对Trolltech QT的体验很好地映射到了Yahoo UI。窗口小部件对象的清晰,定义的API,通过继承重新实现其中一部分的最终自由,不透明渲染,除非您想打开盒子并弄脏手。 QT是一个成功的API,运行良好,易于使用,Yahoo UI在设计风格上有点类似。另一方面,jQuery以反直觉(对我来说)工作,非常开放的方式,在其对象上减少了API。

足够的咆哮。关键是我认为我可能在这方面做错了,但我想知道为什么。拥有类似jQuery的界面有哪些设计优势(DOM显然暴露在外,你可能不得不寻找jQuery插件自动创建的东西,所以你最终可以$(选择)它们并附加事件或修改它们的内容)而不是像YUI那样隐藏对象和商品方法的所有内容?

我不是在谈论速度,代码大小或打字数量。我在谈论封装,专注于接口和易于访问等设计概念。什么设计更好,在什么情况下,为什么?

6 个答案:

答案 0 :(得分:12)

我认为你的论点不是针对jQuery,而是针对插件作者提供的API。

不幸的是,没有两个插件作者会使用相同的API创建一个插件。程序访问的级别不受jQuery本身的限制,而是受插件的作者的限制。

另外,正如你所说,jQuery是关于DOM的 - 我认为这是一个好处,因为它意味着jQuery不会在应用程序的“逻辑”(呃,“业务逻辑”)中混淆...它在自己的抽象层次上相当不错 - 它处理的是DOM,而这就是全部!

您可以为应用程序创建无限量的数据结构和其他API。 jQuery不会在这方面阻碍你。


您已在问题中添加了更多详细信息 - 此“编辑”是对这些详细信息的回应。

我认为当您使用jQuery达到某个阶段时,您遇到的情况很常见...... API变得不足。你不需要DOM ......你想为你的模块提供一个漂亮的干净API,无论是手风琴还是数据网格。

就个人而言,我认为应该将某些内容捆绑到“jQuery插件”中 - 这样做通常意味着牺牲API - 或者不得不诉诸jQuery的机制,如psuedo -event通过“触发器”触发:

var someModule = $('#contain').someCoolModule();
someModule.trigger('initiate');

我得到你所说的,我认为我同意,但我也认为将jQuery放在一个完全独立的层面上是很重要的 - 忘记它 - 只在你需要攻击DOM时才使用它。

答案 1 :(得分:10)

jQuery不需要任何特殊标记 - 您可以为任何对象编写选择器。您还可以使用现有的DOM引用,并将其转换为jQuery对象,如下所示:$(domObject)。实际上比Yahoo UI更简单,更强大。

如果您已经有DOM参考,则无需了解您的dom选择器......这可能是您误解的根源。

在使用Yahoo UI和jQuery之后,让我告诉你它们都是很棒的库。他们担任不同的角色,但都有很好的方法。

jQuery是一种包装器,简化了与DOM,Ajax,选择对象,执行图形有关的所有事情。它有一个非常简洁和出色的简单API,可以抽象出所有浏览器兼容的废话。

jQuery使用了与大多数新手程序员习惯完全不同的设计概念。它实际上是Javascript 应该使用的典型代表。几年前,对Javascript的强大功能有很多无知。大多数情况下,因为互联网上的大多数JavaScript都很糟糕。现在,我想大多数人已经意识到Javascript是最强大的语言之一。它支持几种范例:功能性,命令式,面向对象(原型,不是基于类),数据文字....

jQuery充分利用Javascript的能力,利用其设计的每个方面以最有效的方式解决每个问题。

我告诉所有人学习javascript一遍又一遍地阅读jQuery源代码直到他们理解它......这将很难,但是他们将通过成为更好的程序员来完成,他们的工具箱中有更多种类的工具。

它与Java / .NET洗脑是垂直的,它是为每个开发人员提供一个螺丝刀(OOP),并告诉他们这是编程和生活中每个问题的完美解决方案。

其中,事实并非如此。每个问题都需要不同的工具。 OOP很好,但对于某些问题通常是一个坏主意。

jQuery的mixin风格的插件架构真的很棒。不同,但高效,快速,易于使用。

jQuery是第一个原因 - 它使用简单,功能强大。

对于另一个问题,Yahoo UI是一种不同的方法。它是一个UI工具包,具有非常重的DOM抽象(与jQuery的轻量级方法相比)。 如果你想要超出常规的东西,你会发现自己花了很多时间修改它。 (这是重量级方法的缺点)。

它不是开发应用程序的框架。这是一堆GUI小部件。

我一起使用过。没有理由不能在同一页面上同时使用jQuery和Yahoo UI,它们是针对不同问题的两种不同工具。

我建议包括jQuery site / app-wide,然后根据需要包含jQuery UI插件。如果您需要重量级的东西,请添加Yahoo UI。但坚持使用jQuery为您的管道代码......

从jQuery学习。理解数组编程,回调,数据文字,将代码视为数据以及保持简洁的能力。而为每个问题使用正确的工具意味着更短,更简单的代码。

答案 2 :(得分:1)

在我看来,YUI在DOM操作方面较弱,但在设计方面遥遥领先。

JQuery专为那些几乎没有JavaScript(或通用编码)经验的人而设计。它很容易启动并运行。

YUI更具可读性,任何程序员都可以通过广泛使用最佳实践方法来获取并快速完成。

答案 3 :(得分:1)

jQuery是一个很棒的DOM操作库,它围绕选择器集中它的API是它今天如此受欢迎的原因之一。问题是,如果浏览器DOM API更一致且更易于使用,则不需要jQuery。我同意Robert Harvey(上面评论过)作为DOM上的一个抽象层jQuery做了非常有能力的工作。

但据我了解,你不喜欢jQuery插件系统和jQuery UI,而不是核心库本身。就个人而言,我更喜欢组件和小部件的YUI样式API,因为在更高的抽象级别,DOM元素变得不那么重要了。我认为jQuery UI作者选择这种设计的原因是为了使API与他们的主要产品jQuery库更加一致。但我不同意这是一个很好的决定。

答案 4 :(得分:0)

  1. jQuery旨在与DOM一起使用(即它是一种围绕网页高度优化的语言)。

  2.   

    你可能不得不寻找jQuery插件自动创建的东西

    大概如果它合适,插件会返回一个你可以操作的jQuery对象,除非它编写得很糟糕。在这种情况下,这显然是插件的错误。

  3. 如果您正在使用自动生成ID的方法,那么jQuery可能不适合您。但是,例如我使用jQuery with Google Maps没有太多麻烦。

  4. 如果您想自动向表中添加一行,我确信那里有一个插件。如果没有,则为wouldn't take much to write one

答案 5 :(得分:0)

我同意Computer Linguist。 OOP并非适用于所有可能的问题。 在Web开发的情况下,首先必须决定必须设计的解决方案的类型。该解决方案本质上是一个网页,其中交互式小部件嵌入在增强交互性的地方,或者它是一个完整的RIA。 JQuery,我认为适合第一种情况,它基本上是针对DOM的易处理性。 在RIA应用程序的情况下,工作包在更高的抽象级别工作是首选,因为在这种情况下开发人员正在处理小部件和布局而不是下面的HTML和CSS。在这种情况下,使用像YUI这样的面向对象工具包,Dojo或ExtJS更方便,因为它们将桌面应用程序开发方法(及其相关优势)引入Web域。