docs: function (args, callback) {
  
              var t = +new Date();
              if (t - this._openInProgress < 300) {
                  // Probably a double click, ignore.
                  return false;
              }
              this._openInProgress = t;
  
              // Start profiling view opening.
              var timerId = profiler.onStart(t, args.name);
  
              if (!args.extra) {
                  args.extra = {};
              }
  
              // By default 'Back" will return to previous page.
              if (!args.extra.backhash) {
                  args.extra.backhash = this.currentHash;
              }
  
              // Called when View Manager is done opening the window.
              var that = this;
              var done = function (v) {
  
                  that._openInProgress = false;
                  that.changePage(v._pageUID.replace(/\W/g, '-'), v, args.role);
                  Jackbone.trigger('openview', v);
  
                  // Done profiling.
                  profiler.onEnd(timerId, v._pageUID);
  
                  if (typeof callback === 'function') {
                      callback(v);
                  }
              };
  
              // Open view with the View Manager.
              ViewManager[args.method](args, done);
          }