2015-06-23 3 views
0

ОБНОВЛЕНИЕ: События реакции и ошибки больше не пузырятся. https://github.com/PolymerElements/iron-ajax/releases/tag/v1.0.5 какая жалость.Делегирование обработчиков в полимере 1.0

Оригинальный вопрос:

Я хотел создать пользовательский компонент AJAX на основе железа-АЯКС, чтобы добавить несколько пользовательских заголовков и обработчиков. Хотя наследование пользовательских элементов еще не реализовано, я просто добавил iron-ajax в my-ajax и собирался делегировать все api в iron-ajax, это отлично работало с generateRequest.

Но когда дело дошло до методов обработчиков, я заметил, что он работает без какой-либо делегации. В my-ajax elt нет обработчика on-response, но handleResponse все равно вызывается.

Насколько я понимаю, это происходит потому, что Polymer.Base._addFeature._createEventHandler (polymer.html: 345) использует «это», который является топ-уровня ELT, как «хозяина» для определения методов обработки.

Итак, вопрос: это ошибка или функция?

Пример кода:

<link rel="import" href="https://raw.githubusercontent.com/Polymer/polymer/master/polymer.html"> 
 
<link rel="import" href="https://raw.githubusercontent.com/PolymerElements/iron-ajax/master/iron-ajax.html"> 
 

 
<dom-module id="my-ajax"> 
 
    <template> 
 
     <iron-ajax 
 
       id="ironAjax" 
 
       url="http://echo.jsontest.com/key/value/otherkey/othervalue" 
 
       handle-as="json" 
 
       debounce-duration="300" 
 
       > 
 
     </iron-ajax> 
 
    </template> 
 
    <script> 
 
    Polymer({ 
 
     is: "my-ajax", 
 
     
 
     generateRequest: function(){ 
 
      this.$.ironAjax.generateRequest(); 
 
     } 
 
    }); 
 
</script> 
 
</dom-module> 
 

 
<dom-module id="my-elt"> 
 
    <template> 
 
    <button on-click="buttonClick">Button</button> 
 
    <my-ajax 
 
       id="myAjax" 
 
       on-response="handleResponse"> 
 
     </my-ajax> 
 
    </template> 
 
    <script> 
 
    Polymer({ 
 
     is: "my-elt", 
 
     buttonClick: function(){ 
 
      this.$.myAjax.generateRequest(); 
 
     }, 
 
     handleResponse: function(event) { 
 
      alert('got response'); 
 
     } 
 
    }); 
 
</script> 
 
</dom-module> 
 

 

 
<my-elt></my-elt>

ответ

0

Большинство событий пузырь, так что вы просто увидеть пузырь response событие из my-ajax в my-elt объема через обработчик помещенной на экземпляре my-ajax. Это происходит идентично событию click, которое пузырится от нижней области до верхней области.

Так что ответ: «функция» (от веб-платформы, больше, чем от самого полимера).

+0

hmmm ... может быть, даже пузырьки от железа-аякса до моего аякса? Но почему тогда мой аякс думает, что он должен его обмануть? Он не имеет обработчиков по запросу. Я ожидал бы, что он выкинет ошибку, когда встретит неожиданный атрибут, или, ну, так как это html, при предупреждении leat. – user656449

+0

или добавляет ли атрибут «on-eventname» к любому элементу, чтобы он мог обрабатывать такие события? – user656449

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