diff --git a/src/ol/featureloader.js b/src/ol/featureloader.js
index 060e372171..7d82fc49b1 100644
--- a/src/ol/featureloader.js
+++ b/src/ol/featureloader.js
@@ -1,7 +1,6 @@
goog.provide('ol.featureloader');
goog.require('ol');
-goog.require('ol.Tile');
goog.require('ol.format.FormatType');
goog.require('ol.xml');
@@ -70,35 +69,6 @@ ol.featureloader.loadFeaturesXhr = function(url, format, success, failure) {
};
-/**
- * Create an XHR feature loader for a `url` and `format`. The feature loader
- * loads features (with XHR), parses the features, and adds them to the
- * vector tile.
- * @param {string|ol.FeatureUrlFunction} url Feature URL service.
- * @param {ol.format.Feature} format Feature format.
- * @return {ol.FeatureLoader} The feature loader.
- * @api
- */
-ol.featureloader.tile = function(url, format) {
- return ol.featureloader.loadFeaturesXhr(url, format,
- /**
- * @param {Array.
} features The loaded features.
- * @param {ol.proj.Projection} dataProjection Data projection.
- * @this {ol.VectorTile}
- */
- function(features, dataProjection) {
- this.setProjection(dataProjection);
- this.setFeatures(features);
- },
- /**
- * @this {ol.VectorTile}
- */
- function() {
- this.setState(ol.Tile.State.ERROR);
- });
-};
-
-
/**
* Create an XHR feature loader for a `url` and `format`. The feature loader
* loads features (with XHR), parses the features, and adds them to the
diff --git a/src/ol/vectortile.js b/src/ol/vectortile.js
index 28f740da0a..04efabc99a 100644
--- a/src/ol/vectortile.js
+++ b/src/ol/vectortile.js
@@ -150,6 +150,25 @@ ol.VectorTile.prototype.load = function() {
};
+/**
+ * Handler for successful tile load.
+ * @param {Array.} features The loaded features.
+ * @param {ol.proj.Projection} dataProjection Data projection.
+ */
+ol.VectorTile.prototype.onLoad_ = function(features, dataProjection) {
+ this.setProjection(dataProjection);
+ this.setFeatures(features);
+};
+
+
+/**
+ * Handler for tile load errors.
+ */
+ol.VectorTile.prototype.onError_ = function() {
+ this.setState(ol.Tile.State.ERROR);
+};
+
+
/**
* @param {Array.} features Features.
* @api
@@ -190,9 +209,13 @@ ol.VectorTile.prototype.setLoader = function(loader) {
/**
+ * Sets the loader for a tile.
* @param {ol.VectorTile} tile Vector tile.
* @param {string} url URL.
*/
ol.VectorTile.defaultLoadFunction = function(tile, url) {
- tile.setLoader(ol.featureloader.tile(url, tile.getFormat()));
+ var loader = ol.featureloader.loadFeaturesXhr(
+ url, tile.getFormat(), tile.onLoad_.bind(tile), tile.onError_.bind(tile));
+
+ tile.setLoader(loader);
};
diff --git a/test/spec/ol/featureloader.test.js b/test/spec/ol/featureloader.test.js
index bea9204257..c708377200 100644
--- a/test/spec/ol/featureloader.test.js
+++ b/test/spec/ol/featureloader.test.js
@@ -1,12 +1,7 @@
goog.provide('ol.test.featureloader');
-goog.require('ol.events');
-goog.require('ol.VectorTile');
-goog.require('ol.Feature');
goog.require('ol.featureloader');
goog.require('ol.format.GeoJSON');
-goog.require('ol.format.TextFeature');
-goog.require('ol.proj');
goog.require('ol.source.Vector');
@@ -66,48 +61,4 @@ describe('ol.featureloader', function() {
});
- describe('ol.featureloader.tile', function() {
- var loader;
- var tile;
-
- beforeEach(function() {
- tile = new ol.VectorTile([0, 0, 0]);
- });
-
- it('sets features on the tile', function(done) {
- var url = 'spec/ol/data/point.json';
- var format = new ol.format.GeoJSON();
- loader = ol.featureloader.tile(url, format);
- ol.events.listen(tile, 'change', function(e) {
- expect(tile.getFeatures().length).to.be.greaterThan(0);
- done();
- });
- loader.call(tile, [], 1, ol.proj.get('EPSG:3857'));
- });
-
- it('sets features on the tile and updates proj units', function(done) {
- // mock format that return a tile-pixels feature
- var format = new ol.format.TextFeature();
- format.readProjection = function(source) {
- return new ol.proj.Projection({
- code: '',
- units: 'tile-pixels'
- });
- };
- format.readFeatures = function(source, options) {
- return [new ol.Feature()];
- };
-
- var url = 'spec/ol/data/point.json';
- loader = ol.featureloader.tile(url, format);
- ol.events.listen(tile, 'change', function(e) {
- expect(tile.getFeatures().length).to.be.greaterThan(0);
- expect(tile.getProjection().getUnits()).to.be('tile-pixels');
- done();
- });
- loader.call(tile, [], 1, ol.proj.get('EPSG:3857'));
- });
-
- });
-
});
diff --git a/test/spec/ol/vectortile.test.js b/test/spec/ol/vectortile.test.js
new file mode 100644
index 0000000000..33531d21e6
--- /dev/null
+++ b/test/spec/ol/vectortile.test.js
@@ -0,0 +1,64 @@
+goog.provide('ol.test.VectorTile');
+
+goog.require('ol.events');
+goog.require('ol.VectorTile');
+goog.require('ol.Feature');
+goog.require('ol.format.GeoJSON');
+goog.require('ol.format.TextFeature');
+goog.require('ol.proj');
+
+
+describe('ol.VectorTile.defaultLoadFunction()', function() {
+
+ it('sets the loader function on the tile', function() {
+ var format = new ol.format.GeoJSON();
+ var tile = new ol.VectorTile([0, 0, 0], null, null, format);
+ var url = 'https://example.com/';
+
+ ol.VectorTile.defaultLoadFunction(tile, url);
+ var loader = tile.loader_;
+ expect(typeof loader).to.be('function');
+ });
+
+ it('loader sets features on the tile', function(done) {
+ var format = new ol.format.GeoJSON();
+ var tile = new ol.VectorTile([0, 0, 0], null, null, format);
+ var url = 'spec/ol/data/point.json';
+
+ ol.VectorTile.defaultLoadFunction(tile, url);
+ var loader = tile.loader_;
+
+ ol.events.listen(tile, 'change', function(e) {
+ expect(tile.getFeatures().length).to.be.greaterThan(0);
+ done();
+ });
+ loader.call(tile, [], 1, ol.proj.get('EPSG:3857'));
+ });
+
+ it('loader sets features on the tile and updates proj units', function(done) {
+ // mock format that return a tile-pixels feature
+ var format = new ol.format.TextFeature();
+ format.readProjection = function(source) {
+ return new ol.proj.Projection({
+ code: '',
+ units: 'tile-pixels'
+ });
+ };
+ format.readFeatures = function(source, options) {
+ return [new ol.Feature()];
+ };
+
+ var tile = new ol.VectorTile([0, 0, 0], null, null, format);
+ var url = 'spec/ol/data/point.json';
+
+ ol.VectorTile.defaultLoadFunction(tile, url);
+ var loader = tile.loader_;
+ ol.events.listen(tile, 'change', function(e) {
+ expect(tile.getFeatures().length).to.be.greaterThan(0);
+ expect(tile.getProjection().getUnits()).to.be('tile-pixels');
+ done();
+ });
+ loader.call(tile, [], 1, ol.proj.get('EPSG:3857'));
+ });
+
+});