Hi,大家好!前兩篇文章我們主要講述了以“jQuery的方式如何開發插件”,以及過程化設計與面向對象思想設計相結合的方式是如何設計一個插件的,兩種方式各有利弊取長補短,嘿嘿嘿,廢話少說,進入正題。直接上實際效果圖:
「var itemSelector = new ItemSelector()」裡麵包含兩個參數,第一個是dom節點對象,第二個是插件參數選項,"currentText"代表「ItemSelector「插件中,選取文字顯示區域的文字描述。
”items「是一個數組,裡麵包含的是「ItemSelector」項目的屬性,包括文字描述,選項值,」disabled「代表清單條目的可顯度,0代表顯示,1代表不可顯示。
大熊君{{bb}} - DXJ UI ------ ItemSelector
函數 ItemSelector(elem,opts){
this.elem = elem ;
this.opts = opts ;
} ;
var ISProto = ItemSelector.prototype ;
ISProto.getElem = function(){
返回 this.elem ;
} ;
ISProto.getOpts = function(){
返回 this.opts ;
} ;
/* 資料操作*/
ISProto._setCurrent = 函數(當前){
this.getOpts()["current"] = current ;
} ;
ISProto.getCurrentValue = 函數(當前){
return this.getOpts()["current"] ;
} ;
/* 資料操作*/
ISProto.init = function(){
var that = this ;
this.getOpts()["當前"] = null ; // 資料遊標
this._setItemValue(this.getOpts()["currentText"]) ;
var itemsElem = that.getElem().find(".content .items") ;
this.getElem().find(".title div").on("click",function(){
itemsElem.toggle() ;
}) ;
this.getElem().find(".title span").on("click",function(){
itemsElem.toggle() ;
}) ;
$.each(this.getOpts()["items"],function(i,item){
item["id"] = (new Date().getTime()).toString() ;
that._render(item) ;
}) ;
} ;
ISProto._setItemValue = 函數(值){
this.getElem().find(".title div").text(value)
} ;
ISProto._render = 函數(項目){
var that = this ;
var itemElem = $("
")
.text(item["text"])
.attr("id",item["id"]) ;
if("0" == item["已停用"]){
itemElem.on("點選",function(){
var onChange = that.getOpts()["change"] ;
that.getElem().find(".content .items").hide() ;
that._setItemValue(item["text"]) ;
that._setCurrent(item) ;
onChange && onChange(item) ;
})
.mouseover(function(){
$(this).addClass("item-hover") ;
})
.mouseout(function(){
$(this).removeClass("item-hover") ;
}) ;
}
其他{
itemElem.css("color","#ccc").on("click",function(){
that.getElem().find(".content .items").hide() ;
that._setItemValue(item["text"]) ;
}) ;
}
itemElem.appendTo(this.getElem().find(".content .items")) ;
} ;