Листовка, расширяющая холст - PullRequest
0 голосов
/ 25 февраля 2019

Я пытаюсь расширить холст в Leaflet 1.4 вот так :

L.Canvas.FPCanvas = L.Canvas.extend({
  options: {
    width: 1,
    height: 1
  },

  initialize: function(name, options) {
    this.name = name;
    L.setOptions(this, options);
  },

  onAdd: function (map){},

  onRemove: function (map) {}
});

L.canvas.fpCanvas = function(id, options) {
  return new L.Canvas.FPCanvas(id, options)
}

console.log(L.canvas.fpCanvas("fpCanvas", {width: 10, height: 10}))

const myRenderer = L.canvas();
console.log(myRenderer)

Когда я записываю свой расширенный холст на консоль, все в цепочке прототипов выглядит хорошо.Однако, когда я регистрирую код ниже:

const myRenderer = L.canvas();
console.log(myRenderer)

_layers: {}
_leaflet_id

Эти два дополнительных свойства появляются, в то время как я ожидал, что они будут одинаковыми.Как изменить расширение моего холста, чтобы включить эти дополнительные свойства, если они нужны мне для работы с расширенным настраиваемым холстом.Спасибо

1 Ответ

0 голосов
/ 25 февраля 2019

Вы заменяете реализацию L.Canvas.initialize() своей собственной - поэтому инициализация по умолчанию не происходит .

Позвольте мне процитировать из учебника по брошюре по расширению класса.:

Вызов метода родительского класса достигается путем достижения прототипа родительского класса и использования Function.call(…).Это можно увидеть, например, в коде для L.FeatureGroup:

L.FeatureGroup = L.LayerGroup.extend({

    addLayer: function (layer) {
        …
        L.LayerGroup.prototype.addLayer.call(this, layer);
    },

    …
});

Вызов конструктора родителя выполняется аналогичным образом, но вместо него используется ParentClass.prototype.initialize.call(this, …).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...