我正在尝试弄清楚如何包含外部JavaScript源(图表),但仅限于网站上的单个页面。可以在视图或模板中完成吗?
我发现只是将<script src="exhibit.js"></script>
添加到页面模板不起作用。如果我将它添加到整个网站的模板中,它会加载得很好,但是它会加载到每个页面上。
我的问题的另一面可能更具体。有没有办法在每次加载页面时获取脚本?示例:当我第一次访问包含展示脚本的页面时,它会加载包含展览的ember应用程序并正确显示页面。我离开了页面,当我返回到页面时,展览脚本没有被重新加载,因此没有像第一次访问那样正确地重新绘制页面。
答案 0 :(得分:16)
如果您使用Ember CLI构建应用程序并且exhibit.js
是一个相当小的文件,那么最好在exhibit.js
文件中包含vendor.js
以最小化HTTP请求。
但是,如果您想在单个路线中加载exhibit.js
,您可以使用this answer中描述的polyfill方法,如下所示:
// app/controllers/some-route-name.js
import Ember from 'ember';
export default Ember.Controller.extend({
loadPlugin: function() {
// Use run loop if you need to setup the DOM first
Ember.run.scheduleOnce('afterRender', this, function() {
Ember.$.getScript('path/to/exhibit.js');
});
}.on('init')
});
这将异步加载文件。 getScript docs are here - 你会发现你也可以使用回调。
如果在加载前不需要DOM设置,则可以删除运行循环。在控制器的init
事件上加载此脚本将阻止每次用户导航到路由时重新加载。如果您执行想要每次都加载脚本,您可以将getScript
移至视图的didInsertElement
事件。