我有一个使用 Polymer 1.2 的项目,并且正在尝试使用名为review_data_service.html的 Iron-ajax 创建一个数据服务器组件,它可以进行 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);
},
但是,当我尝试在 dom 中显示这些数据时,它不起作用:
<!-- cannot see anything here: -->
<template is="dom-repeat" items="[[reviews]]">
<div class="project-name">[[item.name]]</div>
</template>
有谁知道会发生什么?一开始我没有使用Promise,我想可能是因为asyc的问题(渲染dom的时候,仍然无法获取数据显示),所以我使用了Promise,但还是得到了相同的结果(只能获取数据控制台)另外,在 Polymer 1 中创建数据服务是否有更好的方法(或示例)?(我曾经使用 Angular 可以完美地实现这一点)只是想创建一个可以支持基本 http 请求(GET、POST、PUT、DELETE)的组件,以便在另一个组件中使用?或将数据服务作为一种行为(我尝试过但效果不佳)非常感谢您!