javascript - 小胡子模板添加条件
问题描述
你好,我是模块化 javascript 编程和模板的新手,我从我以前的幻灯片模块代码中构建模板
代码就像
<section id="slideShow">
<ul>
<li>
<img src="..." alt="">
<a href="...">
<h1 class="slideShowTitle">...</h1>
<p class="slideShowDate">...</p>
<p class="slideShowDetail">...</p>
</a>
</li>
<li>
<img src="..." alt="">
<a href="...">
<h1 class="slideShowTitle">...</h1>
<p class="slideShowDate">...</p>
<p class="slideShowDetail">...</p>
</a>
</li>
<li class="noDetail noLink">
<img src="..." alt="">
<a href="javascript:void(0)">
<h1 class="slideShowTitle">...</h1>
<p class="slideShowDate">...</p>
</a>
</li>
<li class="noDetail noLink">
<img src="..." alt="">
<a href="javascript:void(0)">
<h1 class="slideShowTitle">...</h1>
<p class="slideShowDate">...</p>
</a>
</li>
<li class="noDetail">
<img src="..." alt="">
<a href="...">
<h1 class="slideShowTitle">...</h1>
<p class="slideShowDate">...</p>
</a>
</li>
</ul>
</section>
现在我正在搜索这个像几个小时
我写了这样的东西
<section id="slideShow">
<ul>
<script id="slideShowTemplate" type="text/template">
{{#slideShow}}
<li class="">
<img src="{{.}}" alt="">
<a href="{{.}}">
<h1 class="slideShowTitle">{{.}}</h1>
<p class="slideShowDate">{{.}}</p>
{{#slideShowDetail}}
<p class="slideShowDetail">{{.}}</p>
{{/slideShowDetail}}
</a>
</li>
{{/slideShow}}
</script>
</ul>
</section>
我的主要问题是当你看到一些列表元素(li)里面有 p.slideShowDetail 而有些没有 这个类的时候,父 li 有类“noDetail”
我把
{{#slideShowDetail}}
<p class="slideShowDetail">{{.}}</p>
{{/slideShowDetail}}
让它发挥作用
现在的问题是我想说如果该特定幻灯片没有 slideShowDetail 我希望父 li 有类“noDetail”
同样对于某些幻灯片,a href 是一个地址,对于某些幻灯片,它是“javascript:void(0)”,这意味着该幻灯片不可点击
现在我想以某种方式将此条件放入我的代码中,如果 slideShow 对象数组没有任何链接值,则 href 变为“javascript:void” ,我想在我的 HTML 端执行此操作,而不是在 js 端执行此操作
和
如果该幻灯片没有任何链接,则父 li 的类名也为“noLink”
所以它有点像从下到上的条件
我对此进行了很多搜索,但没有找到任何我开始怀疑的东西,也许我使用了错误的模板系统或方法
感谢你的帮助
更新
{{#slideShow}}
<li class="{{^self.link"}}noLink{{^self.link"}} {{^self.detail"}}noDetail{{^self.detail}}">
<img src="{{.}}" alt="">
<a href="{{^self.link}} ? {{.}} : javascript:void(0)">
<h1 class="slideShowTitle">{{.}}</h1>
<p class="slideShowDate">{{.}}</p>
{{#self.detail}}
<p class="slideShowDetail">{{.}}</p>
{{/self.detail}}
</a>
</li>
{{/slideShow}}
解决方案
Mustache 是一个完美的模板引擎,用它来渲染你的页面并将主要逻辑保存在你的控制器中。
这样您就可以在控制器上设置所有数据,并为您的模板设置一个 json,例如:
{
"slideShow": [
{
"slideClass":"noLink noDetail",
"slideImageUrl":"http://myImage1",
"slideAction":"javascript:void(0)",
"slideTitle":"slide1",
"slideDate": "30/11/2018",
details: [
{ "detail": "detail1" },
{ "detail": "detail2" },
{ "detail": "detail3" }
]
},
{
"slideClass":"",
"slideImageUrl":"http://myImage2",
"slideAction":"doAction();",
"slideTitle":"slide2",
"slideDate": "30/11/2018",
details: [
{ "detail": "detail1" },
{ "detail": "detail2" },
{ "detail": "detail3" }
]
}
]
}
并像这样使用您的模板:
{{#slideShow}}
<li class="{{slideClass"}}">
<img src="{{slideImageUrl"}}" alt="">
<a href="{{slideAction}}">
<h1 class="slideShowTitle">{{slideTitle}}</h1>
<p class="slideShowDate">{{slideDate}}</p>
{{#details}}
<p class="slideShowDetail">{{.}}</p>
{{/details}}
</a>
</li>
{{/slideShow}}
另一方面,否定条件是这样工作的
{
"slideShow": [
]
}
还有你的模板
{{^slideShow}}
<li>
some html code
</li>
{{/slideShow}}
推荐阅读
- android - 无法使用“google_maps_flutter”插件在 Flutter 中显示当前用户位置
- r - 如何使用 Tidymodels 中的更新功能更新调整参数值
- python - Reshape a pandas Series
- sql - 锯齿模式局部最大值的每日总计
- javascript - 函数`this`在nodejs的模块中不起作用
- c - 解决 valgrind“可能丢失”的内存泄漏
- macos - 终端 Mac OS 显示 A^[[C^[[C^[[B^[[D 当按箭头键盘
- python - 在 python 中使用基本递归绘制分形时出错
- c# - JsonConvertDeserializeObject 无法正常工作
- javascript - 如何从 BigInt 计算百分比?