How do I accomplish an if/else in mustache.js?
我不知道如何在胡须中做到这一点似乎很奇怪。 支持吗?
这是我尝试的尝试:
1 2 3 4 5 6 7 8 | {{#author}} {{#avatar}} <img src="{{avatar}}"/> {{/avatar}} {{#!avatar}} <img src="/images/default_avatar.png" height="75" width="75" /> {{/avatar}} {{/author}} |
这显然是不对的,但是文档中没有提到这样的内容。 甚至没有提到"其他"这个词:(
另外,为什么胡须是这样设计的? 这种事情被认为是不好的吗? 是否要强迫我在模型本身中设置默认值? 在不可能的情况下呢?
这是在Mustache中的if / else方法(完全支持):
1 2 3 4 5 6 | {{#repo}} {{name}} {{/repo}} {{^repo}} No repos :( {{/repo}} |
或您的情况:
1 2 3 4 5 6 7 8 | {{#author}} {{#avatar}} <img src="{{avatar}}"/> {{/avatar}} {{^avatar}} <img src="/images/default_avatar.png" height="75" width="75" /> {{/avatar}} {{/author}} |
在文档中查找反向部分:https://github.com/janl/mustache.js
这是您在"控制器"中解决的问题,这是无逻辑模板的关键。
1 2 3 4 5 6 7 8 9 10 11 12 13 | // some function that retreived data through ajax function( view ){ if ( !view.avatar ) { // DEFAULTS can be a global settings object you define elsewhere // so that you don't have to maintain these values all over the place // in your code. view.avatar = DEFAULTS.AVATAR; } // do template stuff here } |
实际上,这比维护可能会在模板中更改的图像网址或其他媒体要好得多,但是需要一些时间来适应。关键是要取消学习模板隧道视觉,将头像img url绑定在其他模板中使用,您是否要在X模板或单个DEFAULTS设置对象上维护该url? ;)
另一种选择是执行以下操作:
1 2 3 | // augment view view.hasAvatar = !!view.avatar; view.noAvatar = !view.avatar; |
并在模板中:
1 2 3 4 5 6 | {{#hasAvatar}} SHOW AVATAR {{/hasAvatar}} {{#noAvatar}} SHOW DEFAULT {{/noAvatar}} |
但这违背了无逻辑模板的全部含义。如果那是您想要做的,那么您就需要逻辑模板,并且不应该使用Mustache,尽管您可以自己给它学习这个概念的机会;)
您的else语句应如下所示(请注意
1 2 3 | {{^avatar}} ... {{/avatar}} |
在胡须中,这称为"倒置部分"。