zTree插件: 程序員
(function($){ json
//常量的定義 函數
var ZTREE_NODECREATED = "ZTREE_NODECREATED"; this
var ZTREE_CLICK = "ZTREE_CLICK"; spa
var ZTREE_RIGHTCLICK = "ZTREE_RIGHTCLICK"; 插件
var ZTREE_CHANGE = "ZTREE_CHANGE"; 對象
//插件方法 事件
$.fn.zTree = function(zTreeSetting, zTreeNodes) { get
//設置setting的默認值 回調函數
var setting = {
checkable: false,
showLine: true,
checkType: {
"Y": "ps",
"N": "ps"
}
}
if (zTreeSetting){//調用zTree方法的執行人把zTreeSetting傳遞進來了
$.extend(setting, zTreeSetting);//把程序員設置setting中的值覆蓋默認的值
}
//setting.treeObjId表明樹的容器ID
setting.treeObjId = this.attr("id");
//setting.treeObj表明樹的容器
setting.treeObj = this;
//綁定事件
bindTreeNodes(setting, this);
//經過該函數公開了API
return new zTreePlugin().init(this);
}
//zTreePlugin函數返回了一個特別大的json格式對象,該對象中包含了公開的API
function zTreePlugin(){
return {
getSetting:function(){},
getNodeByParam:function(){}
};
}
//若是一個函數沒有包含在json對象中,該函數就能夠是私有的方法
})(jQuery)
該結構的優勢:
一、作到了函數的私有和公開
二、常量作到了外部不能訪問
三、結構有着固定的模式
一、聲明常量
二、聲明插件方法
一、把相應的配置設置默認的值
二、把程序員傳遞進來的某幾項配置覆蓋默認的配置
三、聲明事件
四、公開API
三、公開API的方法
四、私有方法
該結構的缺點
結構化不明顯,全是function
事件:
一、事件的聲明
bindTreeNodes
treeObj.unbind(ZTREE_CLICK);
treeObj.bind(ZTREE_CLICK, function (event, treeId, treeNode) {
//callback中的click是一個回調函數
if ((typeof setting.callback.click) == "function") setting.callback.click(event, treeId, treeNode);
});
二、觸發事件
setting.treeObj.trigger(ZTREE_CLICK, [setting.treeObjId, treeNode]);