Created
March 1, 2016 16:16
-
-
Save zobzn/8f337012b76f65c23a4d to your computer and use it in GitHub Desktop.
События загрузки данных у RemoteObjectManager Яндекс.Карт
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
// @see https://yandex.ru/blog/mapsapi/54098 | |
// свой загрузчик данных для RemoteObjectManager | |
// отличия от базового — генерируется события загрузки данных: dataloadbefore и dataloadafter | |
ymaps.modules.define('objectManager.component.ReloadOnZoomChangeControllerWithEvents', [ | |
'util.defineClass', | |
'objectManager.component.ReloadOnZoomChangeController' | |
], function (provide, defineClass, ReloadOnZoomChangeController) { | |
var ReloadOnZoomChangeControllerWithEvents = function (remoteObjectManager) { | |
ReloadOnZoomChangeControllerWithEvents.superclass.constructor.call(this, remoteObjectManager); | |
}; | |
defineClass(ReloadOnZoomChangeControllerWithEvents, ReloadOnZoomChangeController, { | |
loadData: function (tilesArray) { | |
// отправляем событие начала загрузки данных | |
this.events.fire('dataloadbefore'); | |
ReloadOnZoomChangeControllerWithEvents.superclass.loadData.call(this, tilesArray); | |
}, | |
onDataLoad: function (tilesArray, data) { | |
ReloadOnZoomChangeControllerWithEvents.superclass.onDataLoad.call(this, tilesArray, data); | |
// отправляем событие окончания загрузки данных | |
this.events.fire('dataloadafter'); | |
} | |
}); | |
provide(ReloadOnZoomChangeControllerWithEvents); | |
}); | |
// свой RemoteObjectManager | |
// пересылает события от загрузчика данных dataloadbefore и dataloadafter | |
ymaps.modules.define('CustomRemoteObjectManager', [ | |
'util.defineClass', | |
'RemoteObjectManager', | |
'objectManager.component.ReloadOnZoomChangeControllerWithEvents' | |
], function (provide, defineClass, RemoteObjectManager, ReloadOnZoomChangeControllerWithEvents) { | |
var CustomRemoteObjectManager = function (urlTemplate, options) { | |
CustomRemoteObjectManager.superclass.constructor.call(this, urlTemplate, options); | |
}; | |
defineClass(CustomRemoteObjectManager, RemoteObjectManager, { | |
_setupDataLoadController: function () { | |
// т.к. на событие подписываемся уже после инициализации ReloadOnZoomChangeControllerWithEvents | |
// то первое событие dataloadbefore мы уже не успеваем поймать, поэтому вызываем его вручную | |
this._onDataLoadBefore(); | |
// указываем наш новый загрузчик, который может генерировать нужные события загрузки данных | |
this._dataLoadController = new ReloadOnZoomChangeControllerWithEvents(this); | |
this._dataLoadControllerListener = this._dataLoadController.events.group() | |
.add('statechange', this._onDataLoadControllerStateChange, this) | |
.add('pixelboundschange', this._onDataLoadControllerBoundsChange, this) | |
// будем просто забирать себе эти новые события загрузки данных | |
.add('dataloadbefore', this._onDataLoadBefore, this) | |
.add('dataloadafter', this._onDataLoadAfter, this); | |
}, | |
_onDataLoadBefore: function () { | |
// просто перегенерируем событие как свое | |
this.events.fire('dataloadbefore'); | |
}, | |
_onDataLoadAfter: function () { | |
// просто перегенерируем событие как свое | |
this.events.fire('dataloadafter'); | |
} | |
}); | |
provide(CustomRemoteObjectManager); | |
}); | |
// используем новый CustomRemoteObjectManager :-) | |
ymaps.modules.require(['CustomRemoteObjectManager'], function (CustomRemoteObjectManager) { | |
var map, remoteObjectManager; | |
remoteObjectManager= new CustomRemoteObjectManager(...); | |
remoteObjectManager.events.add('dataloadbefore', function () { | |
console.log('грузим данные'); | |
}); | |
remoteObjectManager.events.add('dataloadafter', function () { | |
console.log('данные загружены'); | |
}); | |
map = new ymaps.Map(...); | |
map.geoObjects.add(remoteObjectManager); | |
}); |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment