道歉缺乏精確度的問題建立了一個流星應用一個topjson對象,但我不能完全確定,其中可能很多事情我做錯了這裏。問題與在CoffeeScript中
我是比較新的的CoffeeScript和一般還地理應用程序,但在這裏有雲:
我有一個工作(簡單)流星(.7.0.1)應用程序利用客戶端和服務器的CoffeeScript 。我試圖利用TopoJSON編碼文件創建美國國會地區圖層時遇到了這個問題。 (該應用程序的目的是幫助美國亮點選民抑制)
所以,幾件事情:通常在非流星的應用程序,我只想加載topoJSON文件像這樣:
$.getJSON('./data/us-congress-113.json', function (data) {
var congress_geojson = topojson.feature(data, data.objects.districts);
congress_layer.addData(congress_geojson);
});
現在當然這不會在Meteor中工作,因爲它不是異步的。
這裏推薦的一個東西是不用擔心讀取文件,而是將json文件更改爲.js,然後將內容(當然只是一個對象)設置爲等於一個變量。
下面是我做的:
首先,我將.json文件更改爲服務器目錄中的.js文件,並將「congress =」添加到文件的開頭。這是一個巨大的文件,所以請原諒我省略整個對象。
congress = {"type":"Topology",
"objects":
{"districts":
{"type":"GeometryCollection","geometries":[{"type":"Polygon"
現在,這裏有這裏的一切開始給我的問題:
在server.coffee,我創建了一個變量,像這樣來引用國會對象:
@congress_geojson = topojson.feature(congress, congress.objects.districts)
注意如何我在那裏放@符號?我被告知這允許Coffeescript中的變量在全局範圍內?我試圖在我聲明變量爲「share.congress_geojson」時使用名爲「share」的流星功能。這導致了我將在下面描述的相同問題。
現在在client.coffee文件,我想叫這個變量要裝入單張地圖。
congress_layer = L.geoJson(null,
style:
color: "#DE0404"
weight: 2
opacity: 0.4
fillOpacity: 0.1
)
congress_layer.addData(@congress_geojson)
這不是工作,特別(儘管試圖尋找其他辦法,我越來越控制檯的錯誤是:
Exception from Deps afterFlush function: TypeError: Cannot read property 'features' of undefined
at o.GeoJSON.o.FeatureGroup.extend.addData (http://localhost:3000/packages/leaflet.js?ad7b569067d1f68c7403ea1c89a172b4cfd68d85:39:16471)
at Object.Template.map.rendered (http://localhost:3000/client/client.coffee.js?37b1cdc5945f3407f2726a5719e1459f44d1db2d:213:18)
我毫不懷疑,我失蹤這裏的東西愚蠢明顯。對於我在做什麼完全錯誤的任何建議或提示,將不勝感激。這是在哪裏.js文件全局聲明的對象不代碼可用在.coffee文件的情況下?也許我在做一些錯誤的流星一邊?
謝謝!
編輯:
所以我能夠得到的東西通過將包含在根/ lib文件夾國會對象.js文件,使物體先加載,然後調用來自國會對象工作客戶。但是,我仍然想知道我可以如何簡單地從服務器分享這個對象?這裏的「流星方式」是什麼?
你可以先嚐試內'client.coffee'文件中定義congress_geojson'確認這是一個範圍的問題。另外,'features'從哪裏來?我沒有看到你的代碼,所以它引用哪個庫?這可能會給你一些額外的線索。 –
Serkan,特徵由在會議對象上運行的topojson.feature()函數返回。此外,已經嘗試在客戶端進行定義。沒有骰子。 – JPKab
「@ symbol there?我被告知這允許Coffeescript中的變量在全局範圍內?」不,「@」只是「this」的別名,可能是也可能不指全局上下文。 –