Вопрос о Polymer 1.0, использующем iron-ajax для создания сервера данных
У меня есть проект, использующий Polymer 1.2, и я пытаюсь создать компонент сервера данных, используя iron-ajax с именем review_data_service.html, который может сделать AJAX-вызов для отправки (GET,POST,PUT или DELETE) запроса на серверную часть следующим образом:
<dom-module id="review-data-service">
<template>
<iron-ajax url= "[[URI]]"
id="GET_REVIEWS"
handle-as="json"
loading="{{loading}}"
on-response="handleResponse"
content-type="application/json"
auto></iron-ajax>
</template>
<script>
Polymer({
is: 'review-data-service',
properties: {
reviewId : Number,
API: {
type: Object,
value: () => {
return {
BASE : 'http://localhost:3000',
RESOURCE : 'reviews'
};
}
},
URI : {
type : String,
computed : 'setURI(API.BASE, API.RESOURCE)'
}
},
setURI : (BASE, RESOURCE) => {
return `${BASE}/${RESOURCE}`;
},
handleResponse : function (event) {
let promise = new Promise ((resolve, reject) => {
if (event.detail.response != null) {
resolve(event.detail.response);
} else {
reject('error');
}
});
promise.then(result => {
this.fire('getReviews',
{reviews : result}
)
}, result => {
console.log('reject', result);
})
}
});
</script>
</dom-module>
В моем другом компоненте, my-project-reviewer.html, я могу успешно получить данные обзора, например:
listeners: {
'getReviews': '_getReviews',
},
_getReviews: (event) => {
this.reviews = event.detail.reviews;
// can get the data successfully at here:
console.log(this.reviews);
},
Однако, когда я пытаюсь показать эти данные в домене, это не сработает:
<!-- cannot see anything here: -->
<template is="dom-repeat" items="[[reviews]]">
<div class="project-name">[[item.name]]</div>
</template>
Кто-нибудь знает, что происходит? Вначале я не использовал Promise, я думал, что это может быть из-за проблем с асинхронностью (когда dom отображается, все еще не может получить данные для отображения), поэтому я использовал Promise, но все равно получил тот же результат (только может получить данные в консоль) Плюс, есть ли лучший способ (или пример) для создания службы данных в Polymer 1? (Раньше я использовал Angular, который прекрасно может это сделать) Просто хотите создать компонент, который будет поддерживать базовые http-запросы (GET,POST,PUT,DELETE) для использования в другом компоненте? или сделать службу данных как поведение (я пытался, но не очень хорошо работает) большое спасибо в продвинутом!
1 ответ
Полимер должен знать, что есть что-то, чтобы попытаться позвонить
_getReviews: (event) => {
this.set('reviews', event.detail.reviews);
// can get the data successfully at here:
console.log(this.reviews);
}