如果复选框被选中,速度中断循环

velocity break loops if checkbox is checked

我在 Web 应用程序中使用 Apache Velocity(仅用于实验和练习) 例如:

<input id="limited" type="checkbox"> &nbsp;<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,以便切换开始单击它。