Вот моя ситуация: у меня есть оболочка приложения и есть классы контроллеров для загрузки шаблонов, в которых есть пользовательские полимерные элементы. Пока я загружаю шаблон и добавляю в DOM, и все работает отлично для первого взгляда.AJAX Load Polymer Element и запустить его методы
После добавления содержимого шаблона в DOM я пытаюсь получить доступ к методам пользовательских элементов, но я не смог получить к нему доступ. Если я попытаюсь отладить код и выполнить важные шаги в консоли, то я могу получить доступ к методам элементов.
Мой Элемент:
<link rel="import" href="../../components/polymer/polymer.html" />
<dom-module is="app-login">
<template>
<style>
:host { display: block; }
:host.hide { display: none; }
</style>
<div> samle content </div>
</template>
<script>
Polymer({
is: 'app-login',
run: function() {
return new Promise(function(resolve, reject) {
resolve({'id':0,'name':'user'});
});
},
close: function() {
this.classList.add('hide');
}
});
</script>
</dom-module>
Моя программа:
// [...]
// this works fine, I just add for better understanding
getTemplate(templateName) {
return new Promise(function(resolve, reject)
{
fetch('templates/'+templateName+'.html').then(response => {
document.getElementById('templates').innerHTML += response.text();
resolve(response);
}).catch(error => { reject(error); });
});
};
// [...]
// this method called by the main program and cant't access to the element methods
doLogin() {
this.getTemplate('login').then(templateResponse => {
let Login = document.querySelector('app-login'); // <app-login>...</app-login>
Login.run(); // TypeError: Login.run is not a function
});
};
// [...]
шаблоны/login.html:
<link rel="import" href="elements/app-login/app-login.html" />
<app-login></app-login>
Консоль отладки:
let Login = document.querySelector('app-login');
//Return: <app-login>...</app-login>
Login.run();
//Return: Promise {[[PromiseStatus]]: "pending", [[PromiseValue]]: undefined}
Я пытался искать это, но я не мог найти соответствующий ответ еще, кто-то решил эту проблему в некотором роде раньше?
Уже пробовало:
- SetTimeout после добавления элемента в DOM »такой же результат
- добавления _ к имени методы (как методы бумажных элементов)» такой же результат
- ждет WebComponentsReady события после вставки элемента в событие DOM »не запускается программа остановлена
@ a1626 есть какие-нибудь идеи? :) Я чувствую, что просто использую одну мелочь неправильно, как в прошлый раз. – adaliszk
странно, я так и не получил уведомления об этом упоминании. – a1626
@ a1626 и теперь? – adaliszk