我在网络应用程序中使用apache velocity(仅用于实验和练习) 例如:
<input id="limited" type="checkbox"> <strong>Limited view</strong>
所以我需要一个代码,如果选中上面的复选框,则执行以下操作:
#foreach( $customer in $customerList )
#if( $velocityCount > 5 )
#break
#end
$customer.Name
#end
否则就不要破坏它
这种语法可能吗? 如果是,那么你能告诉我怎么做吗?
请不要粗鲁的评论,我只是想学习......有人可以帮忙吗?
答案 0 :(得分:1)
似乎你希望让Velocity立刻对某些人做出反应点击,对吗?
这不会起作用(没有进一步的努力),因为Velocity模板是服务器端的。您的Velocity代码永远不会注意到&#39;点击,就像在客户端完成一样。至少不是在同一个请求中,但我稍后再说。
此外,Velocity无法直接访问复选框的值,这意味着没有limited.isChecked()
这样的东西。
因此,首先需要的是一个支持(表单)对象,您可以在其中评估并保持复选框的状态。应该没问题,因为你设法提供了对象$customerList
。复选框状态应该用布尔变量表示,比如limitedView
,这样你就可以写:
#foreach( $customer in $customerList )
#if($velocityCount > 5 && $yourBackingObject.isLimitedView())
#break
...
(如果您遇到#break
说明问题,请参阅Breaking out of a foreach loop in Velocity。)
如果您确实需要立即显示缩短列表,请使用JavaScript / Ajax刷新(部分)页面。这个新请求是您更新备份对象和再次呈现模板所需的。
编辑:
或者甚至更简单(但在Veloctiy之外并且取决于JavaScript)在页面中的两个不同容器中提供两个列表,例如<div>
,并在复选框上单击一下以切换css类,以便在两个总是看不见的。
.vm:
<div id="listLength">
#foreach( $customer in $customerList )
#if($velocityCount > 5)
#break
...
</div>
<div id="listLengthToggler">
#foreach( $customer in $customerList )
...
</div>
的CSS
div#listLengthToggler,
div#listLength {
... /* general styles for classes */
display: none;
}
div#listLengthToggler {
display: block;
}
的.js
$(document).ready(
function() {
$('div#listLengthToggler').click(
function() {
$('div#listLength').slideToggle('slow');
}
);
}
);
获取http://code.jquery.com/jquery-2.1.4.min.js
您添加了一行&#39;点击展开!&#39;和&#39;点击折叠!&#39;分别在每个div中删除复选框或调整JavaScript,以便点击它时开始切换。