如何在应用程序模板中先加载 Ember 组件,然后再加载其他所有内容
How to load an Ember Component in application template before everything else?
我目前正在构建一个小的Ember App,允许用户通过地图访问报纸的旅行提示文章。因此,我构建了一个小的传单组件,用于显示应用程序可以与之交互的地图(动画到坐标,更改缩放等)。
地图是应用程序的核心元素,并且始终可见。因此,我将组件放入应用程序模板中。它填充整个背景并固定定位。所有子路线都以"悬停"在地图上的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');
从路由模型钩子中的存储中获取数据。
这个想法是,后台的地图在开始时立即加载,并且在应用程序开始预加载文章时已经可见。我认为如果将其直接放入应用程序模板中,情况就会如此。显然不是。预加载完成后,地图将加载并显示,我不知道如何更改它。如果有人能暗示我正确的方向,那就太好了。
更新控制台日志显示,尽管组件是应用程序模板的一部分,但它会在其他所有内容之后的末尾初始化。不知道为什么。
…
[✓] 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
或afterModel
返回承诺,则不会解析模型。
您将地图放置在应用程序模板中并从索引路由中获取文章,很好。问题在于,返回承诺的嵌套路由也会阻止它们的父路由。在索引转换解析之前,将阻止应用程序转换。
因此,在等待时,您可以使用 加载/错误子状态 .在本例中为加载状态。
示例:http://emberjs.jsbin.com/sihedi/1/edit?html,js,output
在加载状态下,你允许部分呈现,当嵌套路由完成其转换时,加载模板将替换为应用执行的任何操作。
当您加载应用程序时,它要做的第一件事就是处理App.ApplicationRoute
。它将遍历其模型挂钩,设置控制器并呈现模板。之后,它将对App.IndexRoute
执行相同的操作(注意:索引路由始终在父路由下隐式创建),并将其模板呈现为您上面定义的{{outlet}}
。
因此,在我看来,您应该将找到标记的代码放入 App.IndexRoute
.
但是,您可能仍有问题。如果您的{{leaflet-map}}
组件是必须异步加载的组件(从 http://leafletjs.com/reference.html 来看似乎是这种情况),则在 DOM 中呈现组件后,映射本身不会立即显示。在这种情况下,您应该侦听指示地图已加载的事件,然后触发可在路径图层上处理的操作以加载标记。
- AngularJS加载JSON数据,然后从中解析/加载HTML
- 先在Angular中加载配置文件,然后再加载其他文件
- 加载文件,然后调用回调函数
- 如何更改javascript的一个变量,然后运行;“加载”;而无需重新加载页面
- 下拉重新加载页面,然后检索值
- 先加载特定的图像,然后再加载页面的其余部分
- 加载页面,然后在页面加载时执行 javascript
- Angular js,在选择元素上,我想 POST 数据以将其保存在数据库中,然后我想使用 PUT 更新它而无需重新加载
- 使用 jQuery 加载 JSON,然后将其显示给查看器
- 淡出加载然后淡入不起作用
- 可以进行现场重新加载,然后触发点击功能
- 在RadWindow中加载新页面,然后从加载的窗体中关闭窗口
- 加载在JSBN中创建的RSA公钥,然后加密消息
- 加载时可以单击按钮#1,然后需要单击按钮#2两次.按钮#1也需要点击两次
- 地图,rails 4.2,javascript,鼠标悬停,只工作一次(或两次).然后在重新加载之后
- 如何在jQuery中进行页面加载,然后点击
- removeChild,然后再次添加以前删除的Child以重新加载并清理它
- jQuery UI#Accordion加载然后fadeIN..怎样
- 中间的页脚加载然后粘在底部
- 加载然后换行,但是换行在jQuery中不起作用