`
bbiao
  • 浏览: 70879 次
  • 性别: Icon_minigender_1
  • 来自: 南京
最近访客 更多访客>>
文章分类
社区版块
存档分类
最新评论

YUI的一点优点

阅读更多
使用YUI在页面生成Widget时,我们可以使用markup的模式,在这种模式下,生成的widget是从已有的HTML Element中读取一定的信息,并适当的复用一些已有的HTML Element,例如,你可以用以下的HTML元素来生成一个Panel:

<div id="panel1">  
    <div class="hd">Panel #1 from Markup</div>  
    <div class="bd">This is a Panel that was marked up in the document.</div>  
    <div class="ft">End of Panel #1</div>  
</div>  


使用如下的JS:
var panel = new YAHOO.widget.Panel("panel1", {
    /* other properies */
});


那么,这种特点的好处是什么?有一种WEB开发的理论叫做Progressive Enhancement,意在在保证WEB程序对用户提供基本的体验后,再逐步加强应用的用户体验,这样,即使用户的浏览器不支持JS,你的页面他也可以查看的到基本的信息,并且,对于SEO非常有效。并且,YUI使用的markup是完全符合w3c标准的。(想到DOJO的dojoType了嘛?),YUI中的这种例子很多,例如Menu可以从ul li标签生成,DataTable可以从页面的Table元素读取数据……

嗯,因为之前用EXT,整个页面就几个空空的DIV,所以才想找一种有利于在浏览器不支持JS的情况下也能给用户呈现基本视图的方法,于是重新拾起了YUI。
分享到:
评论
10 楼 clia 2008-01-29  
老朽的HTML已经不能适应这个时代的需要了,应该有新的标准语言出来统一大家的标识了。
如果浏览器不能支持的话,我想应该有AJAX框架出来实现XForms、XUL、XAML这些界面标识语言,然后把数据标识的任务交给XHTML 2.0或XML去。
9 楼 sp42 2007-12-26  
air已经是这样做,号称是可利用当前的HTML/CSS/JS技术。迁移到桌面程序的级别来。
8 楼 bbiao 2007-12-26  
jellyme 写道
LZ在YUI的看法上,我是非常赞同的。但是LZ提及的Progressive Enhancement,个人觉得,还不够完整。不过,这已经和主要矛盾十分接近了。且不论YUI和EXT的方式谁好谁坏,单纯从技术的角度来看。

基于JS的Ajax RIA,严格来讲,根本就不算是RIA,它与Flex、Applet等根本就不是用一个东西。我姑且这样定义,RIA是Web应用未来发展趋势,RIA比传统的基于HTML的ThinClient要“高级”很多。那么,很明显的,一个纯粹的基于HTML的ThinClient应用,可以通过多种方式“升级”成为AjaxRIA,而,一个完全的AjaxRIA(比如Ext)根本无法(或者很难)降级成为一个基于HTML的ThinClient应用。

不仅用户体验需要Progressive Enhancement,技术领域同样也需要Progressive Enhancement。如果说你不能肯定用户一定满意你的DesktopStyle,那么同样的,你也无法肯定用户的硬件环境就一定能够接受AjaxRIA(带宽、客户机浏览器环境、客户机性能等等都有很大的不确定性)。因此,仅仅高姿态的将自己的应用定义为AjaxRIA是一种冒险行为。

综上,我非常赞成LZ的想法——因为我也是这样想的,只是对于Progressive Enhancement,我小小的补充了一下,呵呵。


很赞同你的观点,将Ajax Framework与Flex这类框架区分开是有必要的。今天早上我还在想,所谓的RIA,已经完全脱离了标准的HTML等技术,其运行的宿主也由浏览器迁移到了运行于但不仅限于浏览器之上的VM,现在RIA运行于浏览器之中并不是必须的。所以,利用HTML技术来实现完全的RIA是否是正确的做法,是值得商榷的。
7 楼 jellyme 2007-12-25  
LZ在YUI的看法上,我是非常赞同的。但是LZ提及的Progressive Enhancement,个人觉得,还不够完整。不过,这已经和主要矛盾十分接近了。且不论YUI和EXT的方式谁好谁坏,单纯从技术的角度来看。

基于JS的Ajax RIA,严格来讲,根本就不算是RIA,它与Flex、Applet等根本就不是用一个东西。我姑且这样定义,RIA是Web应用未来发展趋势,RIA比传统的基于HTML的ThinClient要“高级”很多。那么,很明显的,一个纯粹的基于HTML的ThinClient应用,可以通过多种方式“升级”成为AjaxRIA,而,一个完全的AjaxRIA(比如Ext)根本无法(或者很难)降级成为一个基于HTML的ThinClient应用。

不仅用户体验需要Progressive Enhancement,技术领域同样也需要Progressive Enhancement。如果说你不能肯定用户一定满意你的DesktopStyle,那么同样的,你也无法肯定用户的硬件环境就一定能够接受AjaxRIA(带宽、客户机浏览器环境、客户机性能等等都有很大的不确定性)。因此,仅仅高姿态的将自己的应用定义为AjaxRIA是一种冒险行为。

综上,我非常赞成LZ的想法——因为我也是这样想的,只是对于Progressive Enhancement,我小小的补充了一下,呵呵。
6 楼 flash 2007-12-25  
ext最让人郁闷的地方就是页面上只有一堆div,对美工设计页面时的要求有点高.我感觉对我而言,能从html element中获取数据是最好的方法
5 楼 bbiao 2007-12-21  
bigxxs 写道
关于Rich Client框架,我认为其主要适用范围是构建Application,而非制作网页,所以楼主所提出的方面在一定程度上可以被牺牲。

不知道谁能详细讲解下applyTo和renderTo区别,以及render()和applyToMarkup()方法的区别,上次问过,给丢到新手区了。看过源码,似懂非懂。


对于applyTo和renderTo,我们在Ext 2.0的官方文档上可以看到,
引用
applyTo : Mixed
The id of the node, a DOM node or an existing Element corresponding to a DIV that is already present in the document that specifies some structural markup for this component. When applyTo is used, constituent parts of the component can also be specified by id or CSS class name within the main element, and the component being created may attempt to create its subcomponents from that markup if applicable. Using this config, a call to render() is not required. If applyTo is specified, any value passed for renderTo will be ignored and the target element's parent node will automatically be used as the component's container.

引用
即applyTo代表一个在页面上已经存在的元素或该元素的id,该元素通过markup的方式来表示欲生成的组件的某些结构化信息,Ext在创建一个组件时,会首先考虑使用applyTo元素中的存在的元素,你可以认为applyTo是组件在页面上的模板,与YUI中的markup模式很相似。当你在config中配置了applyTo属性后,renderTo属性将会被忽略。并且生成的组件将会被自动置去applyTo元素的父元素中。


引用
renderTo : Mixed
The id of the node, a DOM node or an existing Element that will be the container to render this component into. Using this config, a call to render() is not required.

引用
renderTo主要用来表示新生成的组件在页面上的container


让我们来看看Component.js中的相应代码:
    if(this.applyTo){
        this.applyToMarkup(this.applyTo);
        delete this.applyTo;
    }else if(this.renderTo){
        this.render(this.renderTo);
        delete this.renderTo;
    }

    applyToMarkup : function(el){
        this.allowDomMove = false;
        this.el = Ext.get(el);
        this.render(this.el.dom.parentNode);
    }

可见applyTo在Component级别是取得applyTo的parentNode来调用render(),各种继承自Component的组件会在各自的onRender方法中来构建组件,使用CSS选择器来选择相应的元素而不是新生成相应的元素。
例如Panel.js中
        if(this.el){ // existing markup
            this.el.addClass(this.baseCls);
            this.header = this.el.down('.'+this.headerCls);
            this.bwrap = this.el.down('.'+this.bwrapCls);
            var cp = this.bwrap ? this.bwrap : this.el;
            this.tbar = cp.down('.'+this.tbarCls);
            this.body = cp.down('.'+this.bodyCls);
            this.bbar = cp.down('.'+this.bbarCls);
            this.footer = cp.down('.'+this.footerCls);
            this.fromMarkup = true;
        }else{
            this.el = ct.createChild({
                id: this.id,
                cls: this.baseCls
            }, position);
        }
4 楼 bbiao 2007-12-21  
bigxxs 写道
关于Rich Client框架,我认为其主要适用范围是构建Application,而非制作网页,所以楼主所提出的方面在一定程度上可以被牺牲。

不知道谁能详细讲解下applyTo和renderTo区别,以及render()和applyToMarkup()方法的区别,上次问过,给丢到新手区了。看过源码,似懂非懂。
Ext与YUI都没有说过自己是一个专用于RIA的框架吧,主要是自已用EXT做了两个项目之后,感觉太像是桌面应用了,我不清楚用户是否一定能够接受这种应用。我的本意也不是说用YUI和EXT等框架来制作网页,主要目的是想找到一种“非侵入”的方法来增强WEB应用的可用性和用户体验。不如假如如你所说,使用EXT和YUI作为RIA的框架,我也希望我构建的Application在任意的情况下都可以被用户使用(比如用户禁用了JS),而且,单纯的使用JS作为RIA框架,很不利于搜索引擎的检索。
3 楼 bigxxs 2007-12-21  
关于Rich Client框架,我认为其主要适用范围是构建Application,而非制作网页,所以楼主所提出的方面在一定程度上可以被牺牲。

不知道谁能详细讲解下applyTo和renderTo区别,以及render()和applyToMarkup()方法的区别,上次问过,给丢到新手区了。看过源码,似懂非懂。
2 楼 bbiao 2007-12-20  
bagwg1127 写道
ext也有这功能啊,属性好像是contentEl

Ext.form.ComboBox也可以直接从页面的ul li标签来
Ext可以指定applyTo和renderTo,但总觉得还是YUI做得比较好,比较实用
1 楼 bagwg1127 2007-12-20  
ext也有这功能啊,属性好像是contentEl

Ext.form.ComboBox也可以直接从页面的ul li标签来

相关推荐

    YUI 入门教程YUI 入门教程YUI 入门教程

    YUI教程YUI 入门教程YUI 入门教程YUI 入门教程

    yuicompressor-yui compressor

    yuicompressor-2.4.2.jar yuicompressor-2.4.7.jar jsZip.exe yuicompressor yui compressor js压缩工具 javascript压缩工具 css压缩工具 ------------------------------------ //压缩JS java -jar yui...

    yui_2.9.0前端UI

    YUI 库,全称Yahoo! UI Library。是一组工具和控件,用JavaScript写成, 为的是用DOM 脚本,DHTML和AJAX等技术创建丰富的网页交互式应用程序。 YUI 基于BSD协议,对所有的使用方式都是免费的。YUI 项目包括YUI 库和两...

    yui3-master.zip

    yui3-master.zip

    从YUI2到YUI3看前端的演变 pdf

    个人以为在现阶段,这种方式有一点激进,否能为广大用户所接受并发扬光大,还需要时间检验。YUI是个“学院派”的框架,以性能和严谨著称,易用性相对而言弱了一些。它能否在已经拉开的 JavaScript 框架大战中胜出,...

    yuitest YUI测试工具

    YUI Test is a complete testing framework for JavaScript and Web applications. You can use the simple JavaScript syntax to write unit tests that can be run in web browsers or on the command line, as ...

    yui_2.6.0r2

    yui_2.6.0r2 yui_2.6.0r2 yui_2.6.0r2 yui_2.6.0r2 yui_2.6.0r2

    yui 资源包

    yui 源码下载,3.9.0 r2 包,最新版本

    js 压缩YUI

    雅虎的东西,简单的操作很好用 使用例子:java -jar D:\yuicompressor\yuicompressor\yuicompressor.jar E:\js\all.js -o E:\wap\wap2\js\all-min.js --charset utf-8 当然要装jdk了 不然就玩完了

    yuicompressor,给YUI Compressor添加右键命令

    YUI Compressor非常好用,特别是JS的混淆是众多JS Coding的最爱。可惜官网提供的版本都不具备右键功能,每次压缩都要cmd输入一些命令实在是繁琐,本文就介绍如何给YUI Compressor添加右键命令,方便使用。 网上已有...

    YUI中文文档CHM

    YAHOO YUI 中文文档 AJAX 详细 比较好用

    从YUI2到YUI3看前端的演变

    从YUI2到YUI3看前端的演变

    yui压缩

    yui压缩

    YUI3 dialog组件

    基于YUI3的dialog组件该组件是基于YUI3开发的,功能强大,详细见http://www.qiqicartoon.com

    yahoo yui 实例教程

    利用Yahoo YUI库做的一个TREE实例,很详细的阐述了YUI的使用原理

    YUI3 完整包

    Yahoo! UI Library (YUI) 是一个开放源代码的 JavaScript 函数库,为了能建立一个高互动的网页,它采用了AJAX, DHTML 和 DOM 等程式码技术。它也包含了许多 CSS 资源。

    雅虎 用户接口库YUI

    YUI资料 雅虎 用户接口库 中文说明及如何使用学习 Yui组件分成2类:工具包和控件库 Yui 工具包 Yui 工具包利用DOM脚本来简化浏览器内的开发(in-browser devolvement),使用DHTML和AJAX的特性开发所有的Web程序。...

    yuicompressor-2.4.8.jar

    yuicompressor.jar是JS压缩工具、前端优化神器、yuicompressor-2.4.8.jar

    yuicompressor-3.5.jar

    压缩工具YUI-compressor 压缩工具层次不穷,各有优点,选择适合的压缩工具为将来做项目开发使用是一件很重要的事情!!在这介绍YUI-compressor

    yui_3.8.1.zip

    yui_3.8.1.zip

Global site tag (gtag.js) - Google Analytics