Итак, я использую Polymer уже около дня, и у меня возникли проблемы с формулировкой этого вопроса, поэтому, если мой подход выходит из базы, пожалуйста, не чувствуйте необходимости исправлять это, скорее укажите мне в вправо.
У меня есть пользовательские элементы в пользовательских элементах, и я хотел бы, чтобы дочерний элемент влиял на родительские атрибуты. Подход, который я предпринимаю, заключается в создании обработчика кликов, закрытии родительского элемента в IIFE, а затем передача этого обработчика в подкомпонент. Так вот...
Polymer({
ready: function(){
this.superHandler = (function(p) {
return function() {
// "this" here will be the sub-component
p.title = this.title;
}
})(this);
}
});
Если родительский элемент использует его в нем, например...
<polymer-element name="parent-element">
<template>
<sub-element on-click={{superHandler}} />
</template>
</polymer-element>
Это (в моем реальном коде, хотя это возможно там опечатки здесь) работает во всем, кроме IE, и я знаю, что IE официально не поддерживается, но он так близко, что я не хочу отказываться от него. Вещи, которые я хочу избежать, - это повторные ссылки на parentNodes и shadowRoots, чтобы добраться до родителя, которого я ищу.
Edit
Я забыл упомянуть, как он не работает в IE, и почему я хочу избежать вызова parentNode. В IE, когда он отправляется на отправку события, а именно строку 9131 из файла polymer.js, переменная "метод" и ссылка в obj [method] являются строками в IE и поэтому не применяются методы. Причина, по которой я хочу избежать parentNode, заключается в том, что вызывающий объект не является прямым родителем, поэтому я не хочу продолжать получать parentNodes, пока не найду правильный, поскольку код намного понятнее, когда я могу назвать переменную.
Изменить 2
Что я сейчас делаю (поскольку он работает в IE9), хотя я оставляю вопрос открытым для лучшего ответа, это продолжить работу с IIFE, возвращая функцию, которая принимает аргумент, являющийся дочерним. Тогда ребенок найдет интересующего родителя запрос-выборщик. Это означает, что ребенок должен иметь предварительное знание родителя и метод вызова, что не является идеальным, но... IE.
Итак, родитель устанавливает его как...
Polymer('parent-element', {
ready: function(){
this.superHandler = (function(p) {
return function(child) {
p.title = chile.title;
}
})(this);
}
});
И ребенок должен получить его с помощью селектора запросов, например, "parent-element" и узнать имя "superHandler" (не фактическое имя)
Polymer('child-element',{
clickHandler: function(){
var p = document.querySelector('parent-element').superHandler;
p(this);
}
});
Лучшие идеи?