Как да идентифицирате персонализирания елемент, който стартира core-ajax повикване (от отговора на core-ajax)

Използвам Polymer за генериране на списък с персонализирани елементи (пощенска картичка). Във всеки потребителски елемент има миниатюра на изображение, което ще се разшири и ще покаже „оригиналното изображение“, когато се щракне. Връзката „оригинално изображение“ се получава от отговор на ajax извикване към imgur API (с компонент core-ajax).

Опитах тези два маршрута... но все още не съм сигурен за най-доброто решение:

1. Използване на core-ajax компонент във всеки елемент на пощенска картичка.

Това решение изглежда работи, но според мен далеч не е елегантно.

2. Използване на един core-ajax компонент за управление на всяка заявка за API.

Post-list.html

<core-ajax 
  url="{{imgur_url}}"
  handleAs="json"
  on-core-response="{{handleResponse}}">
</core-ajax>

<template repeat="{{post, postIndex in posts}}">
    <post-card post={{post}} id={{postIndex}} on-img-tap={{imgurRequest}}>
</template>

Основният проблем, с който се сблъсквам с това решение, е, че когато получа отговора от core-ajax, не мога да идентифицирам персонализирания елемент (пощенска картичка), който е изпратил заявката.

Мислех да създам нов персонализиран елемент, разширяващ core-ajax, позволявайки ми да предам като параметър (и да го върна в отговора) идентификатора на пощенската картичка, която е изпратила заявката... но мисля, че трябва да има по-просто решение, нали?

Благодаря ви предварително.


person Matteo Mazzarolo    schedule 27.04.2015    source източник


Отговори (1)


Предполагам, че имате нещо като this.$.ajaxId.go(); във вашата imgurRequest функция (по отношение на второто ви решение). Това, което можете да направите, е да изпратите postIndex чрез параметри на ajax. Вашият imgurRequest би изглеждал донякъде така:

imgurRequest: function(e, detail, sender) {
  var postIndex = e.target.templateInstance.model.postIndex;
  // Set a property (to postIndex) which is bound to ajax parameter list here ...
  this.$.ajaxId.go();
}

По този начин можете да правите разлика между вашите пощенски картички, докато използвате една и съща функция и същия core-ajax елемент. Сървърът, разбира се, трябва да изпрати получения идентификатор обратно на клиента.

person zunder    schedule 27.04.2015
comment
Точно това исках да направя, но не знаех, че е възможно да присвоя параметър на code-ajax и да го върна в отговора... Мислех, че това е просто параметър, консумиран от сървъра. Но сгреших, мога да го получа в отговора, ако направя това в core-ajax: params='{"postId": "{{postId}}"}' Благодаря. - person Matteo Mazzarolo; 27.04.2015