2015-11-13 2 views
0

В настоящее время я работаю над созданием ленивой загрузки вместе с «более-маршрутизацией» в Polymer. У меня уже есть первая рабочая версия ленивой загрузки (вдохновленная приложением-маршрутизатором, который, к сожалению, полностью не поддерживает Polymer 1.0), но я не знаю, как я могу передать все события из импортированного дочернего элемента до моего элемента ленивой загрузки.Полимер улавливает все события от дочернего элемента

Итак, в моем примере я хочу, чтобы событие «привет» передавалось от входа в систему до ленивого загрузчика и от ленивого загрузчика вверх до элемента, содержащего ленивый загрузчик, - но без знания этого конкретного события в ленивом режиме, погрузчик. Поэтому мне нужно что-то вроде «улавливать все события, запускаемые дочерним элементом».

Вот что у меня есть:

страниц Логин:

ready:function() { 
       this.fire("hi"); 
      }, 

используя ленивые-погрузчик:

<lazy-loader on-hi="hi" href="../pages/page-login.html" id="login" route="login"></lazy-loader> 

призывающую груз:

document.getElementById("login").load() 

Ленивый-погрузчик (сокращенная версия):

<dom-module id="lazy-loader"> 
<template> 
    <span id="content">Loading...</span> 
</template> 
<script> 
    window.lazyLoaded = window.lazyLoaded || []; 
    Polymer({ 
     is: "lazy-loader", 
     properties: { 
      href:{ 
       type:String, 
       value:"" 
      }, 
      element:{ 
       type:String, 
       value:"" 
      } 
     }, 
     load:function(finishFunc) { 
      if(window.lazyLoaded.indexOf(this.href)===-1) { 
       var that = this; 
       this.importHref(this.href, function(e) { 
        window.lazyLoaded.push(that.href); 
        if(!that.element) { 
         that.element = that.href.split('/').reverse()[0]; 
         that.element = that.element.split(".")[0]; 
        } 
        var customElement = document.createElement(that.element); 

// here I need something like "customElement.on("anyEvent")" 
// => that.fire("anyEvent") 

        Polymer.dom(that.$.content).innerHTML = "Loading done."; 
        Polymer.dom(that.$.content).appendChild(customElement); 
        Polymer.dom.flush(); 
        that.fire("loaded"); 
       }); 
      } 
     } 
    }); 
</script> 

+0

В качестве бокового узла: в настоящее время я думаю о сканировании атрибутов, предоставляемых ленивому загрузчику, начиная с «on-» и добавляя «pass- через слушателей "для этих событий. Я все еще открыт для более общего пути (без атрибутов синтаксического анализа). – Compufreak

ответ

0

Похоже, я должен отменить мой вопрос - если я огонь событие в прикрепленном-обработчика, не готова, она будет передана через автоматически - по крайней мере, в текущей версии полимера , Не уверен, что это предполагаемое поведение, но на данный момент проблема решена. Ответ по-прежнему будет интересным, возможно, для других случаев (например, для регистрации событий)

Смежные вопросы