async load() {
      var backend = this.source || this.storage;

      if (!backend) {
        return;
      }

      this.inProgress = "Loading";
      await backend.ready;
      let data = await backend.load().catch(err => {
        // Try again with init
        if (this.init && this.init != backend) {
          backend = this.init;
          return this.init.ready.then(() => this.init.load());
        } // No init, propagate error


        return Promise.reject(err);
      }).catch(err => {
        if (err) {
          var xhr = err instanceof XMLHttpRequest ? err : err.xhr;

          if ((xhr === null || xhr === void 0 ? void 0 : xhr.status) == 404) {
            this.render(null);
          } else {
            var message = this._("problem-loading");

            if (xhr) {
              message += xhr.status ? this._("http-error", err) : ": " + this._("cant-connect");
            }

            this.error(message, err);
          }
        }

        return null;
      });
      this.render(data);
      this.inProgress = false;
      await Mavo.defer();
      this.dataLoaded.resolve();
      $.fire(this.element, "mv-load");
    }
load - Fetch data from source and render it.

@return {Promise}  A promise that resolves when the data is loaded.