javascript - 我无法输出车把模板中的数据
问题描述
我得到关于异步请求的数据。我将数据传递给函数并将它们按行分解。如何将行传递给模板
async function upComing() {
const { results } = await $.ajax ("https://api.themoviedb.org/3/movie/upcoming?api_key=******************&language=en-US&page="+numberPage);
const { genres } = await $.ajax ("https://api.themoviedb.org/3/genre/movie/list?api_key=******************&language=en-US");
const movies = results.map(({genre_ids, ...rest}) => {
const filteredIds = genres.filter(gen => genre_ids.includes(gen.id));
const genreNames = filteredIds.map(gen_id => gen_id.name);
return {
...rest,
genreNames,
};
});
const splittedArray = splitArray(movies);
function splitArray(arr) {
var result = [];
let row = [];
for (let i = 0; i < arr.length; i++) {
const rowIndex = result.length;
const len = rowIndex & 1 ? 2 : 4 ;
row.push(arr[i]);
if (row.length === len) {
result.push(row);
row = [];
}
}
if (row.length) {
result.push(row);
}
return result;
}
const source = document.getElementById("item").innerHTML;
const template = Handlebars.compile(source);
const html = template(splittedArray);
var numberPage = 1;
$(".content_movie").html(html);
upComing();
解决方案
我找到了解决方案。有必要做一个助手:
Handlebars.registerHelper ('isEqual', function (v1, v2, options) {
if (v1 === v2) {
return options.fn (this);
}
return options.inverse (this);
});
并更改模板:
{{#each splittedArray}}
{{#isEqual this.length 4 }}
<div class="row">
{{#each .}}
<div class="item_4">
<div class="container">
<a class="buttonFavoriteMovie" data-id="{{id}}" onclick="buttonFavoriteMovie({{id}})" href="/"></a>
<a class="moveMovieInfo" onclick="movieSelected({{id}})" href="/item.html">
<img class="poster" src="https://image.tmdb.org/t/p/w300{{poster_path}}" onError="this.src='../img/No_image_available.png'" alt="{{title}}">
<h3 class="title">{{title}}</h3>
<h4 id="categories">{{genreNames}}</h4>
</a>
</div>
</div>
{{/each}}
</div>
{{else}}
<div class="row">
{{#each .}}
<div class="item_2">
<div class="container">
<a class="buttonFavoriteMovie" data-id="{{id}}" onclick="buttonFavoriteMovie({{id}})" href="/"></a>
<a class="moveMovieInfo" onclick="movieSelected({{id}})" href="/item.html">
<img class="poster" src="https://image.tmdb.org/t/p/w300{{poster_path}}" onError="this.src='../img/No_image_available.png'" alt="{{title}}">
<h3 class="title">{{title}}</h3>
<h4 id="categories">{{genreNames}}</h4>
</a>
</div>
</div>
{{/each}}
</div>
{{/isEqual}}
{{/each}}
我在这里有一个错误:
const html = template({splittedArray});
changed to
const html = template({splittedArray});
推荐阅读
- c++ - 如何使用“cstdint”库中的固定大小的整数来存储/打包最大长度为 250MB 的位数据序列?为什么不使用普通的int?
- exchange-server - Exchange Server 2016 - 配置错误消息
- flutter - 是否可以在flutter video_player android中使用PIP(画中画)?
- python - 将光标移动到第一个输入框pyqt5
- api - 使用 JWT 在 Code Igniter 4 中创建登录系统的过程
- azure - 如何从 Terraform 配置 Azure 托管磁盘的备份?
- visual-studio-code - 在浏览器中运行 Visual Studio Code 发生了什么?
- huawei-mobile-services - 为什么我在AppGallery Connect中为其他应用更改货币时,我的应用中的应用内产品价格的货币会自动更改?
- docker - Docker compose 删除 webserver 也会删除数据库
- android - 如果响应在响应 android 改造 API 中没有成功,为什么我会得到空值?