code: function (data, option, callback) {
      var html = '';
      var self = this;
      var fn = self.fn;
      var config = self.config;
      if (typeof option === 'function') {
        callback = option;
        option = null;
      }
      option = option || {};
      callback = callback || function (error, ret) {
        if (error) {
          if (!(error instanceof Error)) {
            error = new Error(error);
          }
          throw error;
        }
        html = ret;
      };
      var name = self.config.name;
      if (!name && fn && fn.TPL_NAME) {
        name = fn.TPL_NAME;
      }
      var scope;
      if (data instanceof Scope) {
        scope = data;
      } else {
        scope = new Scope(data);
      }
      var buffer = new XTemplateRuntime.LinkedBuffer(callback, config).head;
      var tpl = new TplWrap(name, {
        commands: option.commands
      }, self, scope, buffer, name, fn);
      buffer.tpl = tpl;
      if (!fn) {
        config.loader.load(tpl, function (err, fn) {
          if (fn) {
            tpl.fn = self.fn = fn;
            renderTpl(tpl);
          } else if (err) {
            buffer.error(err);
          }
        });
        return html;
      }
      renderTpl(tpl);
      return html;
    }
docs: get result by merge data with template
  @param data
  @param option
  @param callback function called
  @return {String}