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

时间:2016-01-25 03:14:40

标签: html5 apache if-statement checkbox velocity

我在网络应用程序中使用apache velocity(仅用于实验和练习) 例如:

<input id="limited" type="checkbox"> &nbsp;<strong>Limited view</strong>

所以我需要一个代码,如果选中上面的复选框,则执行以下操作:

#foreach( $customer in $customerList )
#if( $velocityCount > 5 )
    #break
#end
$customer.Name
#end

否则就不要破坏它

这种语法可能吗? 如果是,那么你能告诉我怎么做吗?

请不要粗鲁的评论,我只是想学习......有人可以帮忙吗?

1 个答案:

答案 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,以便点击它时开始切换。