циклы разрыва скорости, если установлен флажок

Я использую скорость apache в веб-приложении (только для экспериментов и практики), например:

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

поэтому мне нужен код, который будет... если флажок выше установлен, сделайте следующее:

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

иначе не сломай

возможен ли такой синтаксис? и если да, то можете ли вы показать мне, как?

пожалуйста, без грубых комментариев, я просто пытаюсь научиться... кто-нибудь может помочь?


person anyabythestars    schedule 25.01.2016    source источник


Ответы (1)


Кажется, вы хотите, чтобы Velocity мгновенно реагировала на чей-то клик, верно?

Это не сработает (то есть без дополнительных усилий), потому что шаблон Velocity обрабатывается на стороне сервера. Ваш код Velocity никогда не «заметит» щелчок, как это делается на стороне клиента. По крайней мере, не в том же запросе, но я приду к этому позже.

Кроме того, Velocity не может напрямую получить доступ к значению флажка, а это означает, что не существует такой вещи, как limited.isChecked().

Итак, первое, что вам нужно, это вспомогательный объект (форма), где вы оцениваете и сохраняете статус своего флажка. Не должно быть проблем, так как вам удалось предоставить объект $customerList. Статус флажка должен быть представлен логической переменной, скажем, limitedView, чтобы вы могли написать:

#foreach( $customer in $customerList )
    #if($velocityCount > 5 && $yourBackingObject.isLimitedView())
        #break
        ...

(См. раздел Выход из цикла foreach в Velocity, если у вас возникли проблемы с инструкцией #break.)

Если вам действительно нужно немедленно отобразить сокращенный список, обновите (часть) страницы с помощью 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

Вы добавляете строку с надписью «Нажмите, чтобы развернуть!» и «Нажмите, чтобы свернуть!» соответственно внутри каждого элемента div и избавьтесь от флажка или адаптируйте JavaScript, чтобы переключение начиналось при щелчке по нему.

person MyBrainHurts    schedule 25.01.2016
comment
Я уже пробовал использовать CSS раньше... но функция разрыва не могла работать с CSS, потому что содержимое было динамическим, но я посмотрю, что я могу сделать с предоставленной вами информацией. Спасибо за ответ и кстати, красивое имя пользователя и фото XD - person anyabythestars; 25.01.2016
comment
Возможно, я немного небрежно объяснил, поэтому отредактировал свой ответ. Как видите, класс вообще не мешает динамической части. (И рад, что вам понравилось :-)) - person MyBrainHurts; 25.01.2016