用胡子选择部分

时间:2013-03-11 18:31:42

标签: mustache

如果我是从胡须脚本和部分部分渲染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>

我在这里遗漏了什么吗?我应该尝试这个吗?

1 个答案:

答案 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>