2015年11月18日 星期三

ParseReact實作(五)--query出10個最近的點,顯示在map上面

其實在第二篇我們就寫過,找出十個最近的點,利用的是parse query的near(),可是問題來了!我們現在輸入一個點就會更新一個點,所以TodoItem(存輸入地址的table)跟Taipei(存所有診所的table)不能同時運作,因為我們要等輸入的更新過後才能query他去找最近的點,我們上一篇看到observe()只有一次,可是又只能在裡面query

我現在基本的想法是,將結果的10個點組成array傳入Map.js,在Map.js中把addMarker()放在迴圈中,如此就可在同一地圖上畫出很多點。

我嘗試將死的點餵給他,(每次都先從最笨的開始哈哈哈哈)


出現的結果,點擊還能有文字內容


目前我的問題是,我將讀進來的點存到parse的table,並同時利用這個點去query.near(),找到10個點之後我將它存成一個2D array。

第一:我要怎麼通知TodoList我的array已經產生好了?console.log上面顯示的順序看來,每次還沒產生完新的object,Map的lat、lng就已經被render了啊!!!

第二:如果這樣的方法不可行,我就必須在observe()裡面就產生query,那query裡面可以傳參數嗎?例如:

new Parse.Query('Taipei').near("location",new Parse.GeoPoint( lastItem.lat, lastItem.lng))

結果:

雖然結果是不行,但是我覺得是因為看不懂lastItem是什麼,畢竟他是一個query,如果可以把輸入的點keep住,這個方法或許可行。

第三:以程式順序來說,observe()的query是最先執行的,然後再透過render去呼叫其他需被傳入的參數,可是!!!!為什麼明明在後面被呼叫的 ParseReact.Mutation.Create可以trigger到query?因為輸出的query是有增加新object的,這表示其實query不用更新嗎?只要mutation到他就會自己被更新嗎?


結合以上第二第三,我們將點定義為global變數,然後在query中使用它


定義一個新的nearbyItems來使用near(),並且在render的時候多一個nearbyItems的map來傳最近的十個點給Map,現在的問題是:
Map不能分開,我原來的想法是在lastItem傳兩個參數進去,在nearbyItems再傳兩個進去,這樣一來中心點跟需要被加上去的十個點可以分開處理,可是結果好像不行,有這樣的訊息

於是我把兩個呼叫Map的四個參數全部補滿
雖然可以了可是這麼做會有很多問題:
第一:會傳五次lat lng給map,可是新的紀錄會一直洗掉前一個,變成只出現一張地圖卻有10張空白地圖的位置,因為實際上我們只要傳一次lat lng就好了啊幹嘛傳10次

第二:LastGeoPoint完全沒有更改到,前面一開始的宣告只是為了可以去query near的點,但是接下來在lastItem內做overwrite的時候就沒辦法了,global變數完全不為所動,以至於接下來沒辦法去用LastGeoPoint

第三:map不能拆開,一次就要給他全部需要接收的參數,不能這邊給兩個下一次再給另外兩個,問題是就是要不同的query才能給

我真的是快被卡死了.................



沒有留言:

張貼留言