Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/377.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 将Mustache平面数组放入嵌套元素中_Javascript_Json_Template Engine_Mustache - Fatal编程技术网

Javascript 将Mustache平面数组放入嵌套元素中

Javascript 将Mustache平面数组放入嵌套元素中,javascript,json,template-engine,mustache,Javascript,Json,Template Engine,Mustache,我正在隔离这个问题,并在这里创建一个简单的案例。它基本上是一个图像手风琴(基于CSS3动画),为了使用这个插件,我的HTML结构必须嵌套,如下所示。在他们的示例中,HTML是硬编码的——我需要使用JSON数据来生成输出 假设有这样一个物体 [{imageurl:"link1"}, {imageurl: "link2"}, {imageurl: "link3"}] 我希望输出是 <figure> <img src="link1" /> <figure

我正在隔离这个问题,并在这里创建一个简单的案例。它基本上是一个图像手风琴(基于CSS3动画),为了使用这个插件,我的HTML结构必须嵌套,如下所示。在他们的示例中,HTML是硬编码的——我需要使用JSON数据来生成输出

假设有这样一个物体

[{imageurl:"link1"}, {imageurl: "link2"}, {imageurl: "link3"}]
我希望输出是

<figure>
    <img src="link1" />
    <figure>
        <img src="link2" />
        <figure>
           <img src="link3 />
        </figure>
    </figure>
 </figure>


我在想什么样的模板可以帮助实现这一点?

因为Mustache语言是“无逻辑”的,需要逻辑或复杂嵌套的视图可能需要分解成不同的视图,并通过局部包含,或者在Mustache之外创建,然后重新插入

无论如何,产生您想要的视图的一种方法是反转数组并从内到外嵌套图形():


undefined
传递到第一个模板渲染中时,Mustach将不会生成嵌套图形。每次后续渲染都将过去的输出传递到外部图形等,而不是记录值,然后,您可以根据需要插入HTML块。

纯javascript解决方案不需要使用胡子模板就可以吗?啊,我希望我可以让胡子来做这件事,所以您的意思是说在胡子中不可能?不,我不是这个意思。我以前从未使用过小胡子,它看起来非常简单,javascript可以轻松处理。这不是一个解决方案,因为它不使用胡须,但下面是我使用javascript时想到的方法:。不过,最好还是等一个留胡子的人来回答。编辑:哎呀。忘了保存更改以修复树结构。有趣的是,我在源代码的末尾发现了一个空元素,请审阅。。。我忘了保存它。我也注意到了。我更新了我的评论似乎很酷,我没有进入第一节。。。模板,我们能把这个放在标签里然后调用parse吗it@user2727195我不知道你是什么意思?是的,你可以像对待任何其他模板一样对待模板。我正在编辑第1节来描述,请编辑答案accordingly@user2727195我更新了答案,以澄清是的,您可以将模板放入
脚本
标记中。请注意,链接中有一个模板示例。
<!-- If your desired output is so:
<figure>
    <img src="link1">
    <figure>
        <img src="link2">
        <figure>
           <img src="link3">
        </figure>
    </figure>
 </figure>
-->
<script id="entriesTemplate" type="text/x-mustache-template">
    <figure>
        <img src="{{{imageurl}}}">
        {{{figure}}}
    </figure>
</script>
var figs = [
    {url: "http://placehold.it/10x10"},
    {url: "http://placehold.it/10x10"},
    {url: "http://placehold.it/10x10"}
];

var ft = document.querySelector('#entriesTemplate').innerText.trim();
Mustache.parse(ft);

console.log(
    figs.slice(0) // Make a copy of the array as the next call to `.reverse()` will work in situ
        .reverse()
        .reduce(function (previous, current, index, array) {
            return fig = Mustache.render(ft, {
                imageurl: current.url,
                figure: previous
            });
        }, undefined)
);