2012-03-21 2 views
2

Я хотел бы, чтобы обновить одну из переменных в классе векторного слоя после первоначального вызова к классуOpenLayers - Обновление инициализировать метод класса вызова

OpenLayers.Layer.Observations = OpenLayers.Class(
    OpenLayers.Layer.Vector, { 

, где один из вариантов является метод инициализации:

initialize: function(name, displayStyle, options) { 

Похоже, вы не можете просто переопределить метод инициализации ...

var lyrObs = new OpenLayers.Layer.Observations("Observations",... 

lyrObs.initialize(...) 

Есть ли другой способ обновить переменную initialize methods?

ответ

3

Посмотрите на источник! Существует много примеров. Что вам нужно, это что-то вроде этого:

OpenLayers.Layer.Observations = OpenLayers.Class(OpenLayers.Layer.Vector, { 
    initialize: function(…) { 
     OpenLayers.Layer.Vector.prototype.initialize.apply(this, arguments); 
     // Do what you want here 
    } 
}); 
+0

Что это за заявление? OpenLayers.Layer.Vector.prototype.initialize.apply (это, аргументы); Он найден в методе initialize, но, кажется, вызывает себя с аргументами, которые исходят из синего. – Jonathan

+2

метод 'initialize' класса Observations будет вызывать метод * parent *' initialize' (один из Layer.Vector) в * своей * области видимости ('this', first argument) и с теми же аргументами, которые он получает ('arguments', второй аргумент, ключевое слово зарезервированное javascript для получения аргументов функции). После того как вы вызвали метод родителя, вы можете сделать свой собственный материал. HTH ... – tonio

+0

Спасибо tonio, что помогло мне понять утверждение: OpenLayers.Layer.Vector.prototype.initialize.apply (это, аргументы); Кажется, вы не могли бы назвать это вне класса, правда? То, что я пытаюсь сделать, - перезапустить метод initialize вне класса после того, как класс уже был создан, т. Е. После того, как уже запущен метод intialize. По существу он запускается во второй раз с другим аргументом, когда пользователь переключает поле выбора. Спасибо за помощь до сих пор, я думаю, что приближаюсь. – Jonathan

1

Вы пробовали делать это так?

lyrObs.prototype.initialize = function... 

Кроме того, вы можете overide любого из свойств слоя, как lyrObs.style = ... или lyrObs.data = ...

+0

Ok, так что вы можете переопределить метод инициализации :-), но что, если я просто хочу, чтобы «повторно запустить» метод инициализации после того, как один из свойств слоя были обновлены ? Например, я изменяю lyrObs.style, и он находится в методе инициализации. Есть ли только просто позвонить, не переписывая его? Спасибо за вашу помощь! – Jonathan

Смежные вопросы