gpt4 book ai didi

javascript - jQuery 与 Yahoo UI API 设计

转载 作者:可可西里 更新时间:2023-11-01 01:39:06 25 4
gpt4 key购买 nike

就目前而言,这个问题不适合我们的问答形式。我们希望答案得到事实、引用资料或专业知识的支持,但这个问题可能会引发辩论、争论、投票或扩展讨论。如果您觉得这个问题可以改进并可能重新打开,visit the help center寻求指导。




10年前关闭。




我对 jQuery 和 Yahoo UI API 之间的设计差异感到困惑。免责声明:我非常不喜欢 jQuery api,但我对 Web 编程和一般的 javascript 也非常无知,所以我可能大错特错,回到这里乞求赎回。太长...

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

$("#flexigrid").flexigrid()

jQuery 的一个要求是,在某些情况下,您必须事先为您的 html 遵循非常特定的常规结构。例子:
<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').accordion('option', 'active', 2);

而不是更直观
myAccordion.setActiveTab(2);

另一方面,yahoo 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 插件自动创建的东西,因此您最终可以 $(select) 它们并附加事件或修改它们的内容)而不是像 YUI 那样将所有东西隐藏在对象和商品方法后面?

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

最佳答案

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

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

另外,正如你所说,jQuery 是关于 DOM 的——我认为这是一个好处,因为这意味着 jQuery 不会在应用程序的“逻辑”(嗯,“业务逻辑”)中混在一起......它在它自己的抽象级别上非常好——它处理 DOM,仅此而已!

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

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

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

就我个人而言,我 不要认为应该将某些东西捆绑到“jQuery 插件”中——这样做通常意味着牺牲 API——或者不得不求助于 jQuery 的机制,例如通过“触发器”触发的伪事件:

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

我明白你在说什么,我认为我同意,但我也认为将 jQuery 放在一个完全独立的级别上很重要——忘记它——只在需要攻击 DOM 时使用它。

关于javascript - jQuery 与 Yahoo UI API 设计,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2000597/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com