基于YUI的封装开发

2009年02月03日 | 4,415 次浏览 | 标签: , | 2条评论  

这是去年我在一次公司内部讨论会上的交流主题,相关ppt和样例代码在这里下载

YUI是Yahoo的前端开发框架,它的优点是代码清晰(尽管代码量不小),面向对象和组件,便于协同开发。另外,Yahoo对web开发社区的贡献一直都很积极。

在YUI上扩展开发,一般会采用两种方式,基于对象(object)和基于原型(prototype)。

1. 基于对象(object)
形如singleton单件模式,保证命名空间整洁,方便管理代码。

HN.app.Book =  {
    dialog:new HN.widget.Dialog(),
    getDialog:function(){
        return this.dialog; 
    },
    paging:function(){......}
}

实例

/**
 * @fileOverview 书架(book) app
 */

HN.namespace('app.Book');

HN.app.Book = (function(){
//YAHOO alias section
var $C = YAHOO.util.Connect,
	$D = YAHOO.util.Dom,
	$E = YAHOO.util.Event,
	$CE = YAHOO.util.CustomEvent,
	dialogId = 'abc';//private variable

	function getBook(id){...}//private method
	
	return {
		dialog:null,
		getDialog:function(){
			var dg = this.dialog;
			if(!dg) {
				dg = new HN.widget.Dialog({id: dialogId});
				this.dialog = dg;
			}
			return dg;
		},
		getComment:function(bookId,callback){
			var dg = this.getDialog(),
				bookItem = getBook(bookId);
		}
	}//return ends here
})();

2. 基于原型(prototype)
灵活度高,适合编写通用组件。

HN.widget.Dialog = function(config){
    if(config && config.id) 
          this.id = config.id;
}
HN.widget.Dialog.prototype = {
    setBody:function(html){…},
    show:function(){…}
}

实例

/**
 * @fileOverview 评星级(Rating) widget 
 */

HN.namespace('widget.Rating');

(function(){
	//YAHOO alias section
	var $C = YAHOO.util.Connect,
		$D = YAHOO.util.Dom,
		$E = YAHOO.util.Event,
		$CE = YAHOO.util.CustomEvent,
		counter = 0;//private variable
	function find(key,arr){...} //private method

	HN.widget.Rating = function(el,config) {
		this.isInProgress = false;
		this.setConfig(config);
		this.onComplete = new $CE('onComplete', this);
		this.init();
	}
	HN.widget.Rating.prototype = {
		setConfig:function(config){
			if(!config) return;
			for(var attr in config){
				this.config[attr] = config[attr];
			}
		},
		setState:function(){...},
		post:function(id){...},
		init:function(){...}
	}//prototype ends here
})();

相关文章

评论(2)

  1. netputer 发表于2009年02月08日 7:21 pm

    才发现,原来 YUI 不只是 CSS 框架,更是 JS 框架。谢谢。

  2. hidden 发表于2009年10月23日 10:47 pm

    海内! 现在在干啥?

评论已关闭

文章发表一个月后自动关闭评论,如果对这篇文章内容有疑问或者建议,请随时联系我

最受欢迎

评论最多