2

jQuery Addresspicker ウィジェットを変更して、Google Maps Geocoder の結果に加えて、カスタム データの配列からオートコンプリートの結果を返せるようにしようとしています。目標は、ユーザーがショップ名を検索できるようにすることです。ショップ名はマップの中央に表示され、通り/都市/地域名は変更されていないウィジェットのように表示されます。

問題は、カスタム データをローカル/メソッド変数として保存するウィジェットを取得できないことです。私の推測では、それは閉鎖に関係しており、解決策を探し回っていますが、これまでのところまだ暗闇の中にあります.

カスタム データ配列は、ウィジェットの初期化中に設定されます。

    var marker = createCustomDataArray();

var addresspicker = $( "#searchbox" ).addresspicker({
          mapOptions: {
            zoom: 17, 
            regionBias: "id",
            center: pos,    
            scrollwheel: true,
            mapTypeId: google.maps.MapTypeId.ROADMAP,
            componentRestrictions: { country: "id" },
            types: ['geocode']
          },
          elements: {
            map:      "#mapholder",
            lat:      "#lat",
            lng:      "#lng",
            locality: '#locality',
            country:  '#country'
          },
          customData: marker
        })

変更されたスクリプトは次のとおりです。

$.widget( "ui.addresspicker", {
options: {
    appendAddressString: "",
    draggableMarker: true,
    regionBias: "id",
    mapOptions: {
        zoom: 12, 
        center: new google.maps.LatLng(-5, 106.84517200000005), 
        scrollwheel: false,
        mapTypeId: google.maps.MapTypeId.ROADMAP
    },
    elements: {
        map: false,
        lat: false,
        lng: false,
        locality: false,
        country: false,
        type: false
    },
    customData: null
}, 

setCustomData: function(data) {
    this.customData = data;
    return 42;
},

_create: function() {
  this.geocoder = new google.maps.Geocoder();
  this.element.autocomplete({

    source: $.proxy(this._geocode, this),
    focus:  $.proxy(this._focusAddress, this),
    select: $.proxy(this._selectAddress, this)
  });

  this.lat      = $(this.options.elements.lat);
  this.lng      = $(this.options.elements.lng);
  this.locality = $(this.options.elements.locality);
  this.country  = $(this.options.elements.country);
  this.type     = $(this.options.elements.type);
  if (this.options.elements.map) {
    this.mapElement = $(this.options.elements.map);
    this._initMap();
  }
  this.setCustomData(this.options.customData);

},

何か案は?

4

0 に答える 0