code: function scrollableArrayExtension(target, options) {
      target.updating = ko.observable(false);
      target.done = ko.observable(false);
      target.setOptions = function (newOptions) {
          target.options = newOptions;
          function load(empty) {
              target.options.parameters.offset = empty ? 0 : target().length;
              return newOptions.request(target.options.parameters).then(function (values) {
                  // Set to false before updating the value because somebody may listen to the array and would want to add more elements
                  target.updating(false);
                  if (values.length < options.parameters.limit) {
                      target.done(true);
                  }
                  if (empty) {
                      target(values);
                  }
                  else if (values.length > 0) {
                      ko.utils.arrayPushAll(target, values);
                  }
                  return values;
              }, function () {
                  target.done(true);
                  target.updating(false);
              });
          }
          ;
          target.refresh = function () {
              target.updating(true);
              target.done(false);
              return load(true);
          };
          target.loadNext = function () {
              if (target.updating() || target.done())
                  return;
              target.updating(true);
              load(false);
          };
      };
      target.setOptions(options);
  }
docs: Describes an extension to an observable array that adds a method to load more data
  @param target The observable that is extended
  @param options The options