我正在尝试学习Handlebars.js并考虑如何在我制作的网站中使用它。这是一个单页面网站,将有两个容器,每个容器中都有三个div,每个div都包含嵌入式Soundcloud播放器通过其API。
当在Handlebars处理的脚本标签中包含包含API请求的div时,该网站行为非常不可靠,并且只显示其中的一些六个播放器。它不是真正一致的,但可以始终显示不同的播放器。问题似乎在于Soundcloud JavaScript SDK,但我对其中的内容不太熟悉,因此不想深入了解。
因此,我想到了一种方法来排除播放器div(请参见代码),使它们能够立即加载而不被处理为JavaScript,但仍会显示在占位符div中的艺术家-标题下面(该div设置为包含Handlebar脚本的结果)。
问题在于,我无法找到一个好的方法来实现这一点,是否有任何简单的函数(使用Handlebars助手可能)可以帮助我实现我的目标?
<div id="placeholder"></div>
<script id="player-template" type="text/x-handlebars-template"></script>
<script src="js/handlebars_title_script.js"></script>
当然,一种解决方法是为每个艺术家-标题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(因为那就会导致上述错误,球员显示出奇怪的情况)?