【发布时间】:2015-03-13 10:32:37
【问题描述】:
我正在开发一个 EmberJS 应用程序(我的第一个应用程序),但遇到了一些绊脚石。
我在大多数应用程序逻辑方面都取得了不错的进展,但是真正困扰我的一件事是 IconicJS 无法正常工作。本质上,IconicJS 将 SVG 数据“注入”到 <img> 元素中,因此每次出现具有适当类的新 <img> 元素时都需要运行。人们会这样做:
IconicJS().inject("img.iconic");
所以我试了一下,把它放在 app/views/application.js 和 Foundation 的初始化中:
import Ember from 'ember';
export default Ember.View.extend({
didInsertElement: function() {
this.$().foundation();
IconicJS().inject('img.iconic');
}
});
不过,这似乎只会在初始页面加载时触发。因此,初始页面加载后的任何导航都会导致 svg <img> 标签无法正确呈现。
我不确定这是否与我加载数据的方式有关,因为我对 Ember 还很陌生。
如果有人有任何想法,我真的很想听听他们的意见。如果我没有提供足够的信息,我会提前道歉。如果需要,我很乐意添加更多内容。
编辑
感谢 MrVinz,我能够完成这项工作。我需要的是一个初始化程序。因为我使用的是 Ember-CLI 应用程序,所以它位于app/initializers/initialize-assets.js。该文件的内容是(在我的情况下):
import Ember from 'ember';
export default {
name: 'initialize-assets',
initialize: function() {
Ember.Route.reopen({
renderTemplate: function() {
this.render();
var initResources = function() {
Ember.$().foundation();
IconicJS().inject('img.iconic');
};
Ember.run.scheduleOnce('afterRender', initResources);
}
});
}
};
虽然我仍然不是 100% 从性能的角度来看这是解决此问题的最佳方法,但它现在似乎有效(所有适用的 <img> 标签都被注入,Foundation 仍然正常工作)所以我认为这暂时解决了它。
再次感谢!
【问题讨论】:
-
只是一个关于初始化版本的小评论,我将用 'this._super()' 替换 'this.render()'