【发布时间】:2015-01-14 14:19:55
【问题描述】:
我目前正在构建一个小的 Ember 应用程序,它允许用户通过地图访问报纸上的旅游小贴士文章。因此,我构建了一个小 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 挂钩中,并通过 @987654323 从存储在路由的模型挂钩中获取数据@。
这个想法是后台的地图在开始时加载,并且在应用程序开始预加载文章时已经可见。我认为如果将它直接放入应用程序模板中就会出现这种情况。显然不是。地图在预加载完成后加载并显示,我不知道如何更改它。如果有人能提示我正确的方向,那就太好了。
更新 控制台日志显示该组件,尽管它是应用程序模板的一部分,但在其他所有操作之后都在最后进行了初始化。不知道为什么。
…
[✓] 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挂钩设置为return this.store.find('article')。 -
没那么简单。我必须使用的 API 迫使我循环浏览几页文章以获取所有内容。所以——我没有在适配器中实现这个——我做了一个单独的递归预加载函数,它返回一个 Promise,它解析为下一个返回它的 Promise 的调用,依此类推。最后,所有文章都被推送到商店。为了保持整洁,我将预加载分开并放在 beforeModel 钩子中。
标签: javascript ember.js components leaflet