text: //menu 类
  UF.ui.define('menu', {
      show: function ($obj, dir, fnname, topOffset, leftOffset) {
  
          fnname = fnname || 'position';
          if (this.trigger('beforeshow') === false) {
              return;
          } else {
              this.root().css($.extend({display: 'block'}, $obj ? {
                  top: $obj[fnname]().top + ( dir == 'right' ? 0 : $obj.outerHeight()) - (topOffset || 0),
                  left: $obj[fnname]().left + (dir == 'right' ? $obj.outerWidth() : 0) - (leftOffset || 0)
              } : {}));
              this.trigger('aftershow');
          }
      },
      hide: function (all) {
          var $parentmenu;
          if (this.trigger('beforehide') === false) {
              return;
          } else {
  
              if ($parentmenu = this.root().data('parentmenu')) {
                  if ($parentmenu.data('parentmenu') || all)
                      $parentmenu.ufui().hide();
              }
              this.root().css('display', 'none');
              this.trigger('afterhide');
          }
      },
      attachTo: function ($obj) {
          var me = this;
          if (!$obj.data('$mergeObj')) {
              $obj.data('$mergeObj', me.root());
              $obj.on('wrapclick', function (evt) {
                  me.show();
              });
              me.register('click', $obj, function (evt) {
                  me.hide();
              });
              me.data('$mergeObj', $obj);
          }
      }
  });