Как загрузить внешний JS-файл в компонент с помощью ember-cli
Я создал приложение ember с component
, и я пытаюсь выяснить, как я могу загрузить внешний файл JS, который хранится в vendor
dir приложения в компоненте. Код для компонента выглядит следующим образом:
// app/components/bubbles-page.js
import Ember from 'ember';
export default Ember.Component.extend({
didInsertElement: function() {
// this.$() is a scoped selector to the current view
// bubbles();
// window.onload = bubbles();
// the below line gives the following error,
this.$().bubbles();
// ERROR
//TypeError: this.$(...).bubbles is not a function
// END ERROR
}
});
и ember-cli-build.js
выглядит следующим образом,
/* global require, module */
var EmberApp = require('ember-cli/lib/broccoli/ember-app');
module.exports = function(defaults) {
var app = new EmberApp(defaults, {
// Add options here
//
});
// Use `app.import` to add additional libraries to the generated
// output files.
//
// If you need to use different assets in different
// environments, specify an object as the first parameter. That
// object's keys should be the environment name and the values
// should be the asset to use in that environment.
//
// If the library that you are including contains AMD or ES6
// modules that you would like to import into your application
// please specify an object with the list of modules as keys
// along with the exports of each module as its value.
app.import( app.bowerDirectory + '/d3/d3.min.js');
app.import('vendor/bubbles.js');
return app.toTree();
};
2 ответов
код ember-cli-build.js
ОК.
Что касается вашего файла компонента, вы можете использовать Ember.run.scheduleOnce('afterRender', callback)
чтобы дождаться отображения DOM, а затем вызвать плагин jQuery.
кроме того, обычно с плагинами jQuery вам нужно будет передать селектор jQuery, с помощью которого можно вызвать функцию.
попробуйте следующее:
// app/components/bubbles-page.js
import Ember from 'ember';
export default Ember.Component.extend({
didRender() {
this.$('.my-bubbles-container').bubbles();
}
});
заменить .my-bubbles-container
С вашим селектором jQuery. Я не знаком с плагином jQuery, который вы пытаетесь использовать, но обычно это так будут использоваться Плагины jQuery.
вы можете узнать больше о том, как инициализировать компонент jQuery в [этом сообщении в блоге][1].
обновил ответ
узнав, что ваш bubbles.js
файл не был плагином jQuery и что это была функция, которая работает в глобальном окне, вы можете назвать ее так:
// app/components/bubbles-page.js
import Ember from 'ember';
export default Ember.Component.extend({
didRender() {
bubbles();
}
});
если ваша функция является глобальной функцией, вам нужно будет добавить /* global bubbles */
в файл компонента или добавить bubbles
до predef
массив в .jshintrc
файл, чтобы избежать ошибок JSHint.
это может быть глупый вопрос, но вы перезагрузите ваш ember serve
после добавления импорта в ember-cli-build
? Изменения в Brocfile
или ember-cli-build
не будет подобран до перезагрузки.
еще одна вещь, которую вы можете попробовать, это добавить { type: 'vendor'}
к вашему заявлению импорта:app.import('vendor/bubbles.js', {type: 'vendor'});