Клуб API Карт

передача параметров в init

Пост в архиве.

можно ли как-то передать параметры таким образом

ymaps.ready(init(par1, par2));

function init (par1, par2) {
    var theGeocoder = ymaps.geocode(par1, { results: 1 });
    theGeocoder.then(
   function (res) {
        var firstGeoObject = res.geoObjects.get(0);
        var clientmap = new ymaps.Map("YMapsID", {
            center: firstGeoObject.geometry.getCoordinates(),
            zoom: 16,
            type: "yandex#map" });
        clientmap.controls.add("zoomControl").add("mapTools").add(new ymaps.control.TypeSelector(["yandex#map", "yandex#satellite", "yandex#hybrid", "yandex#publicMap"]));   
        PlacemarkClient = new ymaps.Placemark( firstGeoObject.geometry.getCoordinates(), { balloonContent: par2}, { preset: 'twirl#lightblueIcon'});
        clientmap.geoObjects.add(PlacemarkClient);
    },
    function (err) {
       alert("Ничего не найдено" + err.message);
    }
    )

этот код работать не хочет с ошибкой 'geocode is not a function'

9 комментариев

можно передать через замыкание

Алексей Камынин
28 января 2016, 04:33

а почему такой код не работает? что принимает как параметр функция ready? только функцию без параметров? после С от этого нетипизированного ужаса мозги скручивает )) и про замыкания - можно хоть набросок кода или намек схематичный, про сами замыкания уж е читаю. спасибо.

Функция ready принимает функцию или указатель на функцию (ссылку)

если же вы хотите писать там вызов с параметрами,

нужно чтобы та фукция что вы вызываете возвращала другую функцию (делала return function () {}) которая и будет передана в ready

 

 

ymaps.ready(init(par1, par2));

function init (par1, par2) {

    return function () {

        var theGeocoder = ymaps.geocode(par1, { results: 1 }); // здесь par1 - замыкает контекст родительской функции
        theGeocoder.then(

        ...

    };

}

 

Алексей Камынин
28 января 2016, 04:33

получилось, спасибо огромное.

Спасибо

А при такой структуре javascript :

function ya_map_class() {
   this.name = "ya_map";

   this.init = function()
   {
       alert(1);
   }
}
ya_map = new ya_map_class(); 

 

почему может не срабатывать

 ymaps.ready(ya_map.init);

 

или   ymaps.ready не расчитан на вызов таких методов? 

должен срабатывать, но вы потеряете контекст

всмысле внутри метода init

this будет указывать на window

я делал и так :

 

window.yamap = new yamap_class();

ymaps.ready(window.yamap.init);
 

не срабатывает вообще и ошибок не выдает

 

решил задачу таким деревянным образом:

ymaps.ready(init);
function init ()
{
      window.yamap.init();
}