我对jQuery和Yahoo UI API之间的设计差异感到困惑.免责声明:我非常不喜欢jQuery api,但我对网络编程和javascript一般都是一个无知的人,所以我可能会出错,并回到这里乞求兑换.太长...
我的问题如下.这两种设计是不同的.jQuery将DOM置于中心,并通过在其上执行"触发器"增强器方法来装饰DOM.例
$("#flexigrid").flexigrid()
Run Code Online (Sandbox Code Playgroud)
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>
Run Code Online (Sandbox Code Playgroud)
然后
$("#accordion").accordion();
Run Code Online (Sandbox Code Playgroud)
此外,返回的实体通常不提供任何通过方便的编程方法隐藏DOM的机制.要操纵您的jQuery实体,您必须通过选择器访问DOM,在某些情况下访问不能保证很容易知道,就像内部生成的ID一样.假设你想以编程方式交换手风琴,你所做的就是
$('#accordion').accordion('option', 'active', 2);
Run Code Online (Sandbox Code Playgroud)
而不是更直观
myAccordion.setActiveTab(2);
Run Code Online (Sandbox Code Playgroud)
另一方面,雅虎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那样隐藏物品和商品方法背后的一切?
我不是在谈论速度,代码大小或打字数量.我在谈论封装,专注于接口和易于访问等设计概念.什么设计更好,在什么情况下,为什么?
YUI Compressor不接受通配符参数,所以我不能像这样运行它:
C:>java -jar yuicompressor.jar *.js
Run Code Online (Sandbox Code Playgroud)
但我有超过500个文件,而不是必须创建这样的批处理文件:
C:>java -jar yuicompressor.jar file1.js -o deploy\file1.js
C:>java -jar yuicompressor.jar file2.js -o deploy\file2.js
...
C:>java -jar yuicompressor.jar file500.js -o deploy\file500.js
Run Code Online (Sandbox Code Playgroud)
当然,我的文件名不是那么统一.
有没有办法在不编写任何代码的情况下实现自动化?:)
我很难让CSS工作,就像我希望它用于闪存(当你登录或做某事或什么来确认你的行动时显示的那些小消息,例如在Rails中).
我希望它:
我见过的大多数CSS都没有做到这一点 - 例如,大多数指定固定宽度,这意味着要么包裹得很差,要么填充太多.
我怎样才能做到这一点?(或者:我为什么不能?)
这是我目前的CSS:
<div class="flash info">
<span class="close"><a href="AJAX callback">X</a></span>
Some informational text here that can be closed w/ the X
</div>
<div class="flash error">
Some other simultaneous error
</div>
.flash {
text-align: center;
padding: .3em .4em;
margin: 0 auto .5em;
clear: both;
max-width: 46.923em; /* 610/13 */
*max-width: 45.750em; /* 610/13.3333 - for IE */
}
.flash.error { …Run Code Online (Sandbox Code Playgroud) 我想知道你们对这两个框架的看法,包括:
我已经知道并使用jQuery,我最近发现它缺乏用于大型Web应用程序的"企业就绪"组件.
现在我不想开始讨论jquery,或者为什么mootools不在那里,我想知道你们对这两个框架的具体看法.
谢谢!
所以我理解它jQuery基本上是一个DOM操作的框架,作为一个更高的抽象层,然后是原生的javascript.YUI(yahoo UI)库是一个用户界面小部件库,为开发人员提供了一种忘记DOM操作并更多地处理业务逻辑的方法.
是对的吗?
我的问题:包含两个库是否存在严重的性能问题?YUI与jQuery UI相比如何?
javascript变量是否有存储容量限制?
我正在设计一个YUI数据表,我从数据库中获取数据并将其存储在js对象中,无论何时需要,我将提取它并更新YUI数据表.现在在Dev我很少有记录和正确存储.在生产中我可能有1000个记录,这个js对象能够存储所有这1000个记录吗?
如果它没有能力我将在jsp中创建隐藏的textarea并将数据存储在那里
JavaScript框架,如Prototype,jQuery,YUI,MooTools,Dojo等.所有这些似乎都是针对客户端开发人员的,重点是使用更少的代码更有效地实现通用用户交互模式.
随着服务器端JavaScript的出现,这些框架是否打算采用CommonJS标准来实现其库函数重用于服务器端JavaScript,还是允许其他框架(如Node和Narwhal)处理服务器端用例?
(我意识到这个问题危险地接近可以讨论但没有回答的问题,但我认为Stack Overflow社区实际上可以用特定的引用回答这个问题.)
当用2.4.6最小化yui时,我遇到了这个问题:
java.lang.StringIndexOutOfBoundsException:字符串索引超出范围:232
at java.lang.String.substring(String.java:1934)
at com.yahoo.platform.yui.compressor.JavaScriptCompressor.printSourceString(JavaScriptCompressor.java:267)
at com.yahoo.platform.yui.compressor.JavaScriptCompressor.parse(JavaScriptCompressor.java:330)
at com.yahoo.platform.yui.compressor.JavaScriptCompressor.<init>(JavaScriptCompressor.java:533)
Run Code Online (Sandbox Code Playgroud)
它通过我的IDE启动时工作,但当部署到jboss时它没有.这个地方:http://yuilibrary.com/forum/viewtopic.php?p = 200686对同一个问题进行了一些讨论.
显然问题是org/mozilla/javascript/Parser在我的maven配置中拉入的两个罐子里面:
<dependency>
<groupId>com.yahoo.platform.yui</groupId>
<artifactId>yuicompressor</artifactId>
<version>2.4.6</version>
</dependency>
Run Code Online (Sandbox Code Playgroud)
有什么方法可以使用maven排除等或通过升级我的YUI版本来解决这个问题.它似乎很无聊,它只是不起作用,我不想写一个自定义类加载器.
请帮忙!
我一直在我的项目上使用YuiCompressorTask(最新版本)很长一段时间没有任何问题.在OSX上升级到Oracle的Java 1.7软件包之后,它会出现以下异常(这是针对javascript文件;它适用于css文件):
[yuiCompress] java.lang.reflect.InvocationTargetException
[yuiCompress] at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
[yuiCompress] at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
[yuiCompress] at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
[yuiCompress] at java.lang.reflect.Method.invoke(Method.java:601)
[yuiCompress] at com.yahoo.platform.yui.compressor.Bootstrap.main(Bootstrap.java:21)
[yuiCompress] at ww.ant.YuiCompressorTask.execute(YuiCompressorTask.java:40)
[yuiCompress] at org.apache.tools.ant.UnknownElement.execute(UnknownElement.java:291)
[yuiCompress] at sun.reflect.GeneratedMethodAccessor4.invoke(Unknown Source)
[yuiCompress] at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
[yuiCompress] at java.lang.reflect.Method.invoke(Method.java:601)
[yuiCompress] at org.apache.tools.ant.dispatch.DispatchUtils.execute(DispatchUtils.java:106)
[yuiCompress] at org.apache.tools.ant.Task.perform(Task.java:348)
[yuiCompress] at org.apache.tools.ant.Target.execute(Target.java:390)
[yuiCompress] at org.apache.tools.ant.Target.performTasks(Target.java:411)
[yuiCompress] at org.apache.tools.ant.Project.executeSortedTargets(Project.java:1399)
[yuiCompress] at org.apache.tools.ant.Project.executeTarget(Project.java:1368)
[yuiCompress] at org.apache.tools.ant.helper.DefaultExecutor.executeTargets(DefaultExecutor.java:41)
[yuiCompress] at org.apache.tools.ant.Project.executeTargets(Project.java:1251)
[yuiCompress] at org.apache.tools.ant.Main.runBuild(Main.java:809)
[yuiCompress] at org.apache.tools.ant.Main.startAnt(Main.java:217)
[yuiCompress] at org.apache.tools.ant.launch.Launcher.run(Launcher.java:280)
[yuiCompress] at org.apache.tools.ant.launch.Launcher.main(Launcher.java:109)
[yuiCompress] Caused by: java.util.MissingResourceException: Can't find bundle for …Run Code Online (Sandbox Code Playgroud)