xStore.reviews
Đánh giá sản phẩm.
Phương thức
| Phương thức | Cú pháp | Mô tả | Từ phiên bản |
|---|---|---|---|
list |
xStore.reviews.list({ product_id, cursor?, limit? }): Promise<CursorPage<Review>> |
Đánh giá đã duyệt của một sản phẩm. | 1.0 |
submit |
xStore.reviews.submit({ product_id, rating, title, body }): Promise<Review> |
Gửi đánh giá mới; cần đăng nhập. | 1.0 |
listMine |
xStore.reviews.listMine({ cursor, limit }) hoặc xStore.reviews.listMine(cursor?, limit = 20): Promise<CursorPage<Review>> |
Đánh giá của chính khách đang đăng nhập. | 1.0 |
delete |
xStore.reviews.delete(reviewId): Promise<void> |
Xoá một đánh giá của mình. | 1.0 |
Ví dụ đầy đủ
<script>
// Đọc đánh giá không cần đăng nhập; gửi đánh giá thì có.
async function renderReviews(productId) {
const page = await xStore.reviews.list({ product_id: productId, limit: 10 });
document.getElementById('reviews').innerHTML = page.items.map((r) => `
<li>
<strong>${'★'.repeat(r.rating)}</strong> ${r.title}
<p>${r.body}</p>
<small>${xStore.utils.formatDate(r.created_at)}</small>
</li>
`).join('');
}
document.getElementById('review-form').addEventListener('submit', async (e) => {
e.preventDefault();
const form = e.currentTarget;
try {
await xStore.reviews.submit({
product_id: form.dataset.productId,
rating: Number(form.rating.value),
title: form.title.value,
body: form.body.value,
});
form.reset();
renderReviews(form.dataset.productId);
} catch (err) {
if (err.status === 401) {
window.location.href = '/dang-nhap?next=' + encodeURIComponent(location.pathname);
} else {
alert(err.message);
}
}
});
renderReviews(document.getElementById('review-form').dataset.productId);
</script>
Thư viện gọi tới /api/... trên chính tên miền cửa hàng, nên không cần khai báo địa chỉ máy chủ ở bất kỳ đâu.
Xem thêm Sự kiện để giao diện tự cập nhật sau mỗi thao tác.