2013-04-05 22 views
0

我正在嘗試「緩解」地圖框地圖。很確定這不是特定於mapbox.js正在更新地圖屬性

基本上我通過id地圖,然後調用它的屬性,但這些不會更新地圖。

我可以在taking this example的DOM控制檯中重新創建問題。

a busy cat

在我的應用我有更新地圖的功能,我用的是同樣的邏輯:把經識別地圖,然後調用屬性來移動它。

我錯過了什麼?

謝謝!

在我的代碼我有一個YUI自動完成場,而且都沒有「開」或「之後」的工作:

function addMeasureInput() { 
YUI().use("autocomplete", "autocomplete-filters", "autocomplete-highlighters", function(Y) { 
    //skin 
    Y.one('body').addClass('yui3-skin-sam'); 
    //Array source 
    var locs = getLocationsList(); 
    Y.one('#ac-input').plug(Y.Plugin.AutoComplete, { 
     resultFilters: 'phraseMatch', 
     resultHighlighter: 'phraseMatch', 
     source: locs, 
     on: { 
      select: function() { 
      console.log("Location Selected!"); 
          var map = mapbox.map('map'); 
      map.ease.location({ lat: 0, lon: 0 }).zoom(5).optimal(); 
      } 
     }, 
     after: { 
      select: function(o) { 
       var map = mapbox.map('map'); 
       map.ease.location({ lat: 0, lon: 0 }).zoom(5).optimal(); 
       showLoc(o.result.raw); 
      } 
     } 
    }); 
}); 

};

+0

你可以發表一些你如何實現這個示例代碼? – tristen 2013-04-06 04:48:48

回答

0

mapbox.map('map')必須只創建地圖:http://mapbox.com/mapbox.js/api/v0.6.7/#mapbox.map

Create a map on the current page. 

當我到達地圖的DOM元素document.getElementById('map')我沒有發現任何環節爲mapbox地圖實例。所以可能你不能通過DOM獲得存在的地圖實例。不過,將自己的JavaScript對象保存在DOM元素中是個不錯的主意。

更好地將您的地圖實例保存爲javascript對象。對於您的地圖框實例http://mapbox.com/mapbox.js/example/optimal-easing/map實例存儲在window對象中。所以,你可以只寫:

map.ease.location({ lat: 38.9, lon: -77 }).zoom(10).optimal(); 

map.zoomIn(); 

等它會工作。

UPD: 我瞭解你更好的使用類似延遲初始化:

var map = null; 

function ease (lat, lon, zoom) { 
    if (!map) { 
     map = mapbox.map('map'); 
    } 
    map.ease.location({ lat: lat, lon: lon }).zoom(zoom).optimal(); 
} 

function addMeasureInput() { 
    YUI().use("autocomplete", "autocomplete-filters", 
       "autocomplete-highlighters", function(Y) { 
     //skin 
     Y.one('body').addClass('yui3-skin-sam'); 
     //Array source 
     var locs = getLocationsList(); 
     Y.one('#ac-input').plug(Y.Plugin.AutoComplete, { 
      resultFilters: 'phraseMatch', 
      resultHighlighter: 'phraseMatch', 
      source: locs, 
      on: { 
       select: function() { 
        console.log("Location Selected!"); 
        ease(0, 0, 5); 
       } 
      }, 
      after: { 
       select: function(o) { 
        ease(0, 0, 5); 
        showLoc(o.result.raw); 
       } 
      } 
     } 
    }); 
}); 

但是,不管地圖初始化它是一個非常緩慢的操作(創建DOM,裝載磚),所以最好初始化一眼地圖並可能不需要。

+0

我已經添加了我的代碼中試圖做到這一點的部分。問題在於Mapbox示例將其與onClick()事件綁定,在該事件中,我已經在觸發事件的函數(YUI搜索字段)內。 – brunosan 2013-04-06 20:26:07