이 패턴의 장점:
jQuery 객체, 구성 요소 및 인스턴스 간에 참조를 유지할 수 있습니다.
코드가 명확합니다.
확장하기 쉽습니다.
복잡한 메커니즘을 제거하고 구성 요소를 손으로 완성할 수 있습니다.
마지막 점이 가장 흥미롭습니다. 이 패턴을 따르면 생성자와 프로토타입 메서드를 모두 자유롭게 제어할 수 있습니다. 제거할 수 있는 것은 상속된 해킹이며 심지어 jQuery도 필요하지 않습니다.
손으로 만든 것은 언제나 옳습니다.
간단한 DEMO
/*
* @by ambar_li
* @create 2010-11-30
* 태그 선택, 확인
*/
(function($){
var tagSelector = function( input,options){
var me = this;
var opt = me.opt = $.extend({
limit : 5
,tags : null
,delimiter : ','
}, 옵션 || {});
var $el = me.input = $(input)
var $tags = $(opt.tags); 🎜>if (!$el.length || !$tags.length) return;
$tags.click(function(e){
e.preventDefault();
var tag = $(this ).text ();
me[me.has(tag)?'remove':'add'](tag)
}
tagSelector.prototype = {
추가: 함수(태그){
if(태그){
var me = this, Tags = me.get(), del = me.opt.delimiter
tags.push(tag) ;
me.input.val( tagged.join(del) );
}
return me
}
,remove : function(tag){
var me = this ,exist = function(v){ return v !=tag; };
me.input.val( $.grep(me.get(),exist) )
return me; 🎜>, cleanify : function(){
return this.remove();
}
,limit : function(){
var me = this, Tags = me.cleanify().get ()
,len = tagged.length, max = me.opt.limit;
if(len>max){
me.input.val(tag.slice(0,max) ); 🎜>}
return me;
}
,has: function(tag){
return $.inArray(tag,this.get())
}
, get : function(){
var val = $.trim(this.input.val())
return val ? $.map( val.split(/[,,] /), $.trim ) : [];
}
};
$.fn.tagSelector = function(options){
return this.each(function(){
$(this) .data( 'tagSelector',new tagSelector(this,options));
}
})(jQuery)
마지막 단락.
jQueryUI 비교, 초기화 확인이 있습니다:
코드 복사
} else {
$.data( this, name, new object( options, this ) )
두 가지 호출 방법
코드 복사
코드는 다음과 같습니다.
손쉬운 태그 선택