Я работаю над приложением 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 все еще работает должным образом), поэтому я думаю, что это решает ее для сейчас.
Спасибо еще раз!