簡體   English   中英

如何在其他所有內容之前在應用程序模板中加載Ember組件?

[英]How to load an Ember Component in application template before everything else?

我目前正在構建一個小的Ember App,允許用戶通過地圖訪問報紙的旅行提示文章。 為此,我建立了一個小小的Leaflet組件,該組件顯示應用程序可以與之交互的地圖(動畫以坐標,更改縮放和填充)。

地圖是應用程序的核心元素,始終可見。 因此,我將組件放入了應用程序模板。 它填充整個背景並固定放置。 所有子路線均以“懸停”在地圖上的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');從路由的模型鈎子中的store中獲取數據return this.store.all('article');

想法是,后台地圖會在開始時立即加載,並且在應用開始預加載文章時已經可見。 我認為如果直接將其放置在應用程序模板中就是這種情況。 顯然不是。 預加載完成 ,地圖就會加載並顯示,我不知道如何進行更改。 如果有人可以向正確的方向暗示我,那將是很好的。

更新控制台日志顯示,該組件盡管是應用程序模板的一部分,但在所有其他組件之后都已初始化。 不知道為什么。

…
[✓] 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 

除非模型解析,否則不會渲染模板(地圖)。 如果鈎住beforeModelafterModel返回beforeModel則不會解析該模型。

您已將地圖放置在應用程序模板中,並從索引路徑中獲取了文章,很好。 問題在於,返回承諾的嵌套路線也會阻止其父母。 在索引轉換解決之前,應用程序轉換將被阻止。

因此,在等待期間,您可以使用加載/錯誤子狀態 在這種情況下,處於加載狀態。

示例: http//emberjs.jsbin.com/sihedi/1/edit?html,js,output

在加載狀態下,您允許部分渲染,並且當嵌套路由完成其過渡時,加載模板將替換為您的應用執行的任何操作。

加載應用程序時,要做的第一件事是處理App.ApplicationRoute 它將通過其模型掛鈎,設置控制器並呈現模板。 之后,它將對App.IndexRoute執行相同的App.IndexRoute (注意:索引路由始終在父路由之下隱式創建),並將其模板呈現到您在上面定義的{{outlet}}

因此,在我看來,您應該將找到標記的代碼放入App.IndexRoute

但是,您可能仍然有問題。 如果您的{{leaflet-map}}組件是必須異步加載的東西(在http://leafletjs.com/reference.html上似乎是這種情況),則地圖本身不會在該組件之后立即顯示在DOM中呈現。 在這種情況下,您應該偵聽表示地圖已加載的事件,然后觸發可在路線層處理的操作以加載標記。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM