define(function(require, exports, module) { module.exports = { init: function(DOM, opts) { var opts = $.extend({ htmlTpl: '', //控件模板 selected: 0, //选中项ID disableId: 0, //禁止ID加载 defaultText: false, //默认文本 firstText: '请选择...', //首个加载控件文本 script: '', //请求脚本地址 getPathScript: '', mapping: new Array(), //控件映射 [['province', '请选择省份...'], ['city', '请选择城市...']] callback: function(data) {}, //回调方法 rootId: 0 //载入的根ID }, opts); var data = new Object(); var path = new Array(); //初始化 if (opts.selected) { $.ajaxSetup({async:false}); $.getJSON(opts.getPathScript, {cid:opts.selected}, function(data){ var el = $(this); $.each(data, function(i, id){ $('[value='+id+']', el).attr('selected', true); el = loadNote(id, el); }); }); } else { loadNote(opts.rootId, $(this)); } function loadNote(id, obj) { var level = ($(obj).data('level') ? $(obj).data('level') : 0) + 1; $('.JS_DmenuSelect').each(function() { var lv = $(this).data('level'); if (lv >= level) { $(this).remove(); } }); var mp = opts.mapping[level-1]; var el = $(opts.htmlTpl) .data('level', level) .addClass('JS_DmenuSelect') .change(function() { if (!$(this).val()) return false; loadNote($(this).val(), $(this)); }); $.getJSON(opts.script, {pid:id}, function(data){ if (level == 1) { el.appendTo(DOM); } else { el.insertAfter(obj); } if (opts.firstText && level == 1) { el.empty(); $(el).append(''); } else if (opts.defaultText) { el.empty(); $(el).append(''); } if (mp) { el.attr('name', mp[0]); if (mp[1]) { el.empty(); el.append(''); } } var find = false; $.each(data, function(key, val) { if (opts.disableId != val.id) { if (val.parent_id == id) { $(el).append(''); find = true; } } }); if (!find) $(el).remove(); opts.callback($(':selected', obj).data('extend') ? $(':selected', obj).data('extend') : false); }); return el; } } }; })