Uncaught TypeError: this.get (...). Push не является функцией
В результате попытки вызова .push
для функции.Например, из вашего console.log
мы видим, что this.get('_hj')
- это функция, и вы попытались вызвать .push
для нее.Вы получите ту же ошибку, если попытаетесь:
let x = function(){ }
x.push()
В любом случае, давайте разберемся с этим.Аддон предоставил инициализатор ember-hotjar , который вызывает:
import hj from '../hotjar/main';
...
let h = hj.create();
application.register('hotjar:main', h, {instantiate: false});
application.inject('controller', '_hj', 'hotjar:main');
application.inject('route', '_hj', 'hotjar:main');
Независимо от того, hotjar/main
экспорт используется для создания h
.Это регистрируется в контейнере внедрения зависимостей для ember с ключом hotjar:main
в качестве общего объекта (т. Е. hotjar:main
содержит ссылку на уже созданный экземпляр объекта, а не на фабрику).Затем из-за inject
все маршруты и все контроллеры получают доступ к указанному объекту через this._hj
.Пожалуйста, смотрите регистрацию или раздел руководства для инъекций для получения дополнительной информации.
Итак, теперь нам нужно исследовать функцию main.js который экспортирует hj
var hj = window.hj = window.hj || function(){(window.hj.q=window.hj.q||[]).push(arguments)};
...
export default {
create: function () {
return hj;
}
};
это присваивает window.hj || function(){(window.hj.q=window.hj.q||[]).push(arguments)};
обоим hj
и window.hj
, что в конечном итоге означает, что в вашем контроллере this._hj
=== function(){(window.hj.q=window.hj.q||[]).push(arguments)};
Так что, увидев все это, я не совсем уверен, что вы ожидаете от push
.Я думаю, вы можете просто хотеть this._hj('trigger', 'hello_world')
?Желаем удачи