如果复选框被选中,速度中断循环
velocity break loops if checkbox is checked
我在 Web 应用程序中使用 Apache Velocity(仅用于实验和练习)
例如:
<input id="limited" type="checkbox"> <strong>Limited view</strong>
所以我需要一个代码...如果选中上面的复选框然后执行此操作:
#foreach( $customer in $customerList )
#if( $velocityCount > 5 )
#break
#end
$customer.Name
#end
否则就不要破坏了
这种语法可行吗?
如果是,那么你能告诉我怎么做吗?
请不要粗鲁的评论,我只是想学习...有人可以帮忙吗?
您似乎希望让 Velocity 立即对某人的点击做出反应,对吧?
这是行不通的(也就是说,没有进一步的努力),因为 Velocity 模板是在服务器端呈现的。您的 Velocity 代码永远不会 'notice' 点击,因为它是在客户端完成的。至少不是在同一个请求中,但我稍后再谈。
此外,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 class单击复选框,使两者中的一个始终不可见。
.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
您在每个 div 中分别添加一行 'Click to expand!' 和 'Click to collapse!',然后取消复选框或调整 JavaScript,以便切换开始单击它。
我在 Web 应用程序中使用 Apache Velocity(仅用于实验和练习) 例如:
<input id="limited" type="checkbox"> <strong>Limited view</strong>
所以我需要一个代码...如果选中上面的复选框然后执行此操作:
#foreach( $customer in $customerList )
#if( $velocityCount > 5 )
#break
#end
$customer.Name
#end
否则就不要破坏了
这种语法可行吗? 如果是,那么你能告诉我怎么做吗?
请不要粗鲁的评论,我只是想学习...有人可以帮忙吗?
您似乎希望让 Velocity 立即对某人的点击做出反应,对吧?
这是行不通的(也就是说,没有进一步的努力),因为 Velocity 模板是在服务器端呈现的。您的 Velocity 代码永远不会 'notice' 点击,因为它是在客户端完成的。至少不是在同一个请求中,但我稍后再谈。
此外,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 class单击复选框,使两者中的一个始终不可见。
.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
您在每个 div 中分别添加一行 'Click to expand!' 和 'Click to collapse!',然后取消复选框或调整 JavaScript,以便切换开始单击它。