text: // dropList fn bind
  _e(function (E, $) {
  
      var DropList = E.DropList;
  
      // init
      DropList.fn.init = function () {
          var self = this;
  
          // 生成dom对象
          self.initDOM();
  
          // 绑定command事件
          self.bindEvent();
  
          // 声明隐藏的事件
          self.initHideEvent();
      };
  
      // 初始化dom结构
      DropList.fn.initDOM = function () {
          var self = this;
          var data = self.data;
          var tpl = self.tpl || '<span>{#title}</span>';
          var $list = $('<div class="wangEditor-drop-list clearfix"></div>');
  
          var itemContent;
          var $item;
          $.each(data, function (commandValue, title) {
              itemContent = tpl.replace(/{#commandValue}/ig, commandValue).replace(/{#title}/ig, title);
              $item = $('<a href="#" commandValue="' + commandValue + '"></a>');
              $item.append(itemContent);
              $list.append($item);
          });
  
          self.$list = $list;
      };
  
      // 绑定事件
      DropList.fn.bindEvent = function () {
          var self = this;
          var editor = self.editor;
          var menu = self.menu;
          var commandName = menu.commandName;
          var selectorForELemCommand = self.selectorForELemCommand;
          var $list = self.$list;
  
          // 执行事件前后的钩子函数
          var beforeEvent = self.beforeEvent;
          var afterEvent = self.afterEvent;
  
          $list.on('click', 'a[commandValue]', function (e) {
              // 正式命令执行之前
              if (beforeEvent && typeof beforeEvent === 'function') {
                  beforeEvent.call(e);
              }
  
              // 执行命令
              var commandValue = $(e.currentTarget).attr('commandValue');
              if (menu.selected && editor.isRangeEmpty() && selectorForELemCommand) {
                  // 当前处于选中状态，并且选中内容为空
                  editor.commandForElem(selectorForELemCommand, e, commandName, commandValue);
              } else {
                  // 当前未处于选中状态，或者有选中内容。则执行默认命令
                  editor.command(e, commandName, commandValue);
              }
  
              // 正式命令之后的钩子
              if (afterEvent && typeof afterEvent === 'function') {
                  afterEvent.call(e);
              }
          });
      };
  
      // 点击其他地方，立即隐藏 droplist
      DropList.fn.initHideEvent = function () {
          var self = this;
  
          // 获取 list elem
          var thisList = self.$list.get(0);
  
          E.$body.on('click', function (e) {
              if (!self.isShowing) {
                  return;
              }
              var trigger = e.target;
  
              // 获取菜单elem
              var menu = self.menu;
              var menuDom;
              if (menu.selected) {
                  menuDom = menu.$domSelected.get(0);
              } else {
                  menuDom = menu.$domNormal.get(0);
              }
  
              if (menuDom === trigger || $.contains(menuDom, trigger)) {
                  // 说明由本菜单点击触发的
                  return;
              }
  
              if (thisList === trigger || $.contains(thisList, trigger)) {
                  // 说明由本list点击触发的
                  return;
              }
  
              // 其他情况，隐藏 list
              self.hide();
          });
  
          E.$window.scroll(function () {
              self.hide();
          });
  
          E.$window.on('resize', function () {
              self.hide();
          });
      };
  
  });