【发布时间】:2014-08-12 18:21:44
【问题描述】:
我正在尝试学习 Handlebars.js,并想出了一种在我正在制作的网站中使用它的方法。这是一个单页网站,其中包含两个容器,每个容器中包含三个 div,每个容器将通过其 API 包含嵌入式 Soundcloud 播放器。
当在 Handlebars 处理的脚本标记中包含包含 API 请求的 div 时,该站点的行为非常不可靠,并且仅显示六个播放器中的一些播放器。它不是真正一致的,但可以一直显示不同的玩家。问题似乎出在 Soundcloud javascript SDK 中,但我不觉得熟悉在那里挖掘太多。
因此我想了一些方法来排除播放器 div(请参阅代码),以便它们立即加载而不是作为 javascript 处理,但仍显示在艺术家下方 - 占位符 div 中的标题(设置为包含 Handlebar 脚本的结果)。
问题是我想不出一个好的方法来做这件事,有没有什么简单的功能(可能有 Handlebars 助手)可以帮助我做我想做的事?
<div id="placeholder"></div>
<script id="player-template" type="text/x-handlebars-template">
<div id="container1">
Artist1 - {{title1}}
<div id="player1"></div>
Artist2 - {{title2}}
<div id="player2"></div>
Artist3 - {{title3}}
<div id="player3"></div>
</div>
<div id="container2">
Artist4 - {{title4}}
<div id="player4"></div>
Artist5 - {{title5}}
<div id="player5"></div>
Artist6 - {{title6}}
<div id="player6"></div>
</div>
</script>
<script src="js/handlebars_title_script.js"></script>
一种解决方案当然是为每个 Artist - Title div 制作一个 Handlebar 模板,并将每个模板的占位符设置为仅包含 Artist1 - {{title1}} 的 div,但这确实破坏了使用 Handlebars 来最小化我的HTML 编码。
有人知道如何解决这个问题吗?
编辑 1:
我通过更改我的 javascript 找到了另一个解决方案(我一开始没有发布,所以很明显你无法帮助我)。
$(document).ready(function() {
var hey = "heya";
SC.get("/users/artist/tracks", {limit: 1}, function(tracks){
var title_data1 = tracks[0].title;
hey = tracks[0].title;
alert(title_data1);
alert(hey)
});
//Data that will replace the handlebars expressions in our template
var playerData = {
title1 : hey,
};
document.getElementById( 'player-placeholder' ).innerHTML = playerTemplate( playerData );
});
对不起,不好的打算。此代码的唯一问题是 title1(在变量 playerData 中,即 Handlebars 上下文中)获取变量 hey(“heya”)的第一个值。当它被警告时它会弹出真实的标题,我怎样才能让 title1 使用这个值而不是在更多的 javascript 中嵌套变量(因为这就是导致前面提到的玩家出现奇怪的错误的原因)?
【问题讨论】:
标签: javascript html handlebars.js