Как определить пользовательский элемент, который запустил вызов core-ajax (из ответа core-ajax)

Я использую Polymer для создания списка пользовательских элементов (открытки). Внутри каждого пользовательского элемента есть миниатюра изображения, которое при нажатии раскрывается и показывает «исходное изображение». Ссылка «исходное изображение» получается из ответа на ajax-вызов imgur API (с компонентом core-ajax).

Я пробовал эти два маршрута... но я все еще не уверен в лучшем решении:

<сильный>1. Использование компонента core-ajax внутри каждого элемента открытки.

Это решение, кажется, работает, но, на мой взгляд, оно далеко не элегантно.

<сильный>2. Использование единого компонента core-ajax для управления каждым запросом API.

Пост-список.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