Ember.js 在特定页面上包含外部脚本
Ember.js include external script on specific page
我正在尝试了解如何包含外部 javascript 来源(展示),但仅限于网站上的单个页面。可以在视图或模板中完成吗?
我发现简单地将 <script src="exhibit.js"></script>
添加到页面模板是行不通的。如果我将它添加到整个网站的模板中,它会加载得很好,但是它会加载到每个页面上。
我的问题的另一面可能更具体。有没有办法在每次加载页面时都获取脚本?示例:当我第一次访问包含 exhibit 脚本的页面时,它会加载包含 exhibit 的 ember 应用程序,并且页面会正确显示。我离开页面,当我 return 到页面时,展示脚本没有重新加载,因此没有像第一次访问时那样正确地重绘页面。
如果您使用 Ember CLI 构建您的应用程序并且 exhibit.js
是一个相当小的文件,您最好在 vendor.js
文件中包含 exhibit.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
事件。
我正在尝试了解如何包含外部 javascript 来源(展示),但仅限于网站上的单个页面。可以在视图或模板中完成吗?
我发现简单地将 <script src="exhibit.js"></script>
添加到页面模板是行不通的。如果我将它添加到整个网站的模板中,它会加载得很好,但是它会加载到每个页面上。
我的问题的另一面可能更具体。有没有办法在每次加载页面时都获取脚本?示例:当我第一次访问包含 exhibit 脚本的页面时,它会加载包含 exhibit 的 ember 应用程序,并且页面会正确显示。我离开页面,当我 return 到页面时,展示脚本没有重新加载,因此没有像第一次访问时那样正确地重绘页面。
如果您使用 Ember CLI 构建您的应用程序并且 exhibit.js
是一个相当小的文件,您最好在 vendor.js
文件中包含 exhibit.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
事件。