如果我是从胡须脚本和部分部分渲染HTML,我可以根据渲染的数据选择使用哪个部分吗?
例如:
data = {"posts": [
{"type":"text", "body":"I'm text"},
{"type":"image", "uri":"http://placekitten.com/200/300"}
]}
使用类似的基本模板:
<ul class="posts">
<li>
{{#posts}}
{{> {{type}}}}
{{/posts}}
</li>
</ul>
然后text.mustache
:
<p>{{body}}</p>
image.mustache
:
<img src="{{uri}}" />
这将呈现为:
<ul class="posts">
<li>
<p>I'm text</p>
</li>
<li>
<img src="http://placekitten.com/200/300" />
</li>
</ul>
我在这里遗漏了什么吗?我应该尝试这个吗?
答案 0 :(得分:1)
你在这里要问的是这条线的“逻辑”方面,因此,这是Mustache试图避免的。这并不是说没有办法做到这一点,它可能不是你想的那样:)
在Mustache中,对许多更高级用法的正确答案是“准备你的观点”。这也不例外。我会这样做:
function addHelpers(posts) {
for (var i = 0, l = posts.length; i < l; i++) {
posts[i].isText = posts[i].type === 'text';
posts[i].isImage = posts[i].type === 'image';
posts[i].isVideo = posts[i].type === 'video';
}
return posts;
}
data = {"posts": [
{"type":"text", "body":"I'm text"},
{"type":"image", "uri":"http://placekitten.com/200/300"}
]}
data.posts = addHelpers(data.posts);
然后你的基本模板看起来像这样:
<ul class="posts">
{{# posts }}
<li>
{{# isText }}{{> text }}{{/ isText }}
{{# isImage }}{{> image }}{{/ isImage }}
{{# isVideo }}{{> video }}{{/ isVideo }}
</li>
{{/ posts }}
</ul>