关于如何在ember加载完模板后触发事件问题?
问题很简单,可是我网上却始终没有找到方法。
事情是这样的,比如我有个模板类似如此
<button type="button" class="btn btn-default" data-toggle="tooltip" data-placement="top" title="Tooltip on top">Tooltip on top</button>
我在模板加载完后要执行脚本如下
$(function(){$('button').tooltip();});
但我在route与controller中均未找到触发模板加载完后的事件,不知道在ember的应用中类似的脚本(在dom都加载完成后)该如何处理,在何处被触发?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(2)
经过一天的努力,自己找到了解决方案,但由于对ember不熟悉不保证是最好的解决方案如果你有更好的方案请不吝告知。
问题是这样的项目采用ember+bootstrap的方式,其中用到bootstrap中tooltip的javascript组件,但tooltip组件采用了data-api的方式将数据绑定在html标签中,只能在dom加载进页面后手动触发$.tooltip方法来实现。
我找到的方案是采用在ember中运用view的didInsertElement事件,该事件将在把view中的html加载到文档后触发。
一下是我的部分实现代码:
模板代码
其中用了自定义的TooltipView来包裹需要加载后处理的html代码。
TooltipView的实现代码:
其主要功能是查找带有“data-toggle=tooltip”的html元素并对该元素调用tooltip完成组件初始化工作。
你的解法思路是对的,利用 View 的
didInsertElement
钩子来操作 DOM。不过最好不要直接用 View 来扩展,而是把 Tooltip 写成一个 Component。View 是 Ember 很多 UI 组件的底层实现,而 Component 则是其中的一个高级接口,也是应对你题目中场景最推荐的办法。其实 Component 就是一个扩展的 View,不过比 View 更适合封装可重用的 UI 组件。