我目前正在建立一個小Ember應用程序,允許用戶通過地圖訪問報紙的旅行小貼士文章。因此,我構建了一個小傳單組件,該組件顯示應用程序可以與之交互的地圖(動畫到座標,更改縮放和其他內容)。如何在應用程序模板之前加載Ember組件?
地圖是應用程序的核心元素,並始終可見。所以我將組件放入應用程序模板中。它填充了整個背景並且位置固定。所有子路線都在div.content
中呈現,「盤旋」在地圖上。
…
<div class="app-body">
<script type="text/x-handlebars" data-template-name="application" id="application">
<div class="map-container">
{{leaflet-map
id="map"
class="map"}}
</div>
<div class="content">
{{outlet}}
</div>
</script>
</div>
…
正如我必須預裝所有與它們的座標物品就在開始(將所有標記),我增加了預加載到IndexRoute的beforeModel鉤和路由模式獲取從存儲中的數據通過return this.store.all('article');
掛鉤。
這個想法是,背景中的地圖在開始加載並且在應用程序開始預加載文章時已經可見。我認爲如果將它直接放入應用程序模板就是這種情況。顯然不是。地圖加載並顯示預加載完成後,我不知道如何改變它。如果有人能夠向我提出正確的方向,那會很棒。
更新 控制檯日誌表明compontent,儘管它的應用程序模板的一部分,是在一切之後結束初始化。不知道爲什麼。
…
[✓] template:index ............................................. template at index
[ ] view:default ............................................... undefined.DefaultView
Transition #0: TRANSITION COMPLETE.
[ ] helper:leaflet-map ......................................... undefined.LeafletMapHelper
[ ] component-lookup:main ...................................... undefined.MainComponentLookup
[✓] template:components/leaflet-map ............................ template at components/leaflet-map
[✓] component:leaflet-map ...................................... undefined.LeafletMapComponent
爲什麼在這裏將事物分成'beforeModel'和'model'?在我看來,你可以在'beforeModel'中刪除你的代碼,然後簡單地將'model'鉤子'返回this.store.find('article')'。 – NudeCanalTroll
並不那麼簡單。我必須與API合作的API迫使我循環瀏覽幾頁文章以獲得全部內容。因此 - 不是將其實現到適配器 - 我做了一個單獨的遞歸預加載函數,它返回一個承諾,解析下一個調用,返回它的承諾等等。最後所有文章都被推送到商店。爲了保持整潔,我分開了預加載並將其放入beforeModel鉤子中。 – Oliver