docs: function render(data) {
                  if (!this._rendered) {
                      if (this.template) {
                          if (data) {
                              this.data = data;
                          }
                          var options = this._options,
                              parentChildren = this._parentChildren,
                              decoder = new Decoder(this.template),
                              template = decoder.render(this.data);
                          if (this.el) {
                              var parent = this.el.parentNode;
                              if (parent) {
                                  parent.replaceChild(template.fragment, this.el);
                              }
                              if (this.elGroup && this.elGroup.get(this.el)) {
                                  this.elGroup.delete(this.el);
                                  this.el = template.fragment;
                                  this.elGroup.set(template.fragment, this);
                              }
                          } else {
                              this.el = template.fragment;
                          }
  
                          this.root = new dom.Element(template.fragment, {
                              name: 'root',
                              data: {}
                          });
  
                          this.children = applyElement(template.children, options);
                          applyParent(this, parentChildren, this.data);
                          this.bindings = setBinders(this.children, true);
  
                          if (this.data) {
                              this.applyBinders(this.data, this);
                          }
  
                          setRoutes(this.children, this.context);
                          addChildren(this, this.root);
                          this.rendered.apply(this, _toConsumableArray(this._arguments));
                          this._rendered = true;
                      } else {
                          var HTMLelement = document.createElement('div');
                          this.root = new dom.Element(HTMLelement, {
                              name: 'root',
                              data: {}
                          });
                          if (this.el) {
                              var _parent = this.el.parentNode;
                              if (_parent) {
                                  _parent.replaceChild(HTMLelement, this.el);
                              }
                          }
                          this.el = HTMLelement;
                          this.children = {};
                          addChildren(this, this.root);
  
                          this.rendered.apply(this, _toConsumableArray(this._arguments));
                          this._rendered = true;
                      }
                  }
              }