Динамически показать предыдущий / следующий div с XQuery - рекурсия? - PullRequest
0 голосов
/ 23 октября 2018

зная сообщество,

Я хочу вкратце добиться следующего: у меня есть XML-файл со списком пиццы внутри (это своего рода тестовый файл).На моей странице есть меню выбора, из которого пользователь выбирает одну пиццу и размер пиццы, которые затем отображаются ниже.Контент будет отображаться только после того, как пользователь выбрал.Это функция:

declare function app:showpizza2($node as node(), $model as map(*)){

    let $pizza1 := request:get-parameter('selectMenu1', '')
    let $size1 := request:get-parameter('size1', '')
    return

    for $pizza in $app:pizza//pizza
    where $pizza/@id eq $pizza1
    let $id := $pizza/@id
    return

    (<a data-key="{ $id }" class="person"><div>{ $pizza1 }</div></a>,
    <div>{ $size1 }</div>)    
};

Со второй функцией я хочу создать кнопки «предыдущий / следующий», которые берут текущую отображаемую пиццу, находят ее внутри дерева XML и затем на один шаг вверх или вниз,Пока что я могу показать одну пиццу выше или ниже с такими строками:

declare function app:previousPizza($node as node(), $model as map(*)){

    let $pizza1 := request:get-parameter('selectMenu1', '')
    return 

    for $pizza in $app:pizza//pizza
    where $pizza/@id eq $pizza1
    let $previousPizza := $pizza/preceding::pizza[1]
    return 

        <p>{ $previousPizza }</p>
};

Проблема, конечно, в том, что в качестве «текущего параметра пиццы» я беру только выбранное пользователем значение из меню выбора,Так что я думаю, что это типичная проблема рекурсии, потому что я хочу иметь функцию, которая всегда принимает текущий параметр после нажатия на кнопку, но я действительно не знаю, как этого добиться.Вы можете помочь?

Это мой html-файл, где я вызываю следующие функции:

<div class="row">
    <div class="col-sm-4">        
        <!-- form for choosing pizza -->
        <form action="?">                   
            <!-- select Pizza type -->
            <select name="selectMenu1" id="pizzamenu1" 
                data-placeholder="Pizza wählen" style="width:150px">
                <option value=""></option>
                <option value="pizza1">Pizza 1</option>
                <option value="pizza2">Pizza 2</option>
                <option value="pizza3">Pizza 3</option>
            </select>              
            <!-- select pizza size -->
            <select name="size1" data-placeholder="Größe wählen"
                style="width:150px;" onchange="this.form.submit()">
                <option value=""></option>
                <option value="family">Familien Pizza</option>
                <option value="medium">Mittel Pizza</option>
                <option value="small">Kleine Pizza</option>
            </select>
        </form>
    </div>
</div>

<div class="row">
    <div class="col-sm-4">              
        <!-- showpizza2 returns chosen pizza from select menu -->
        <div data-template="app:showpizza2"/>             
        <!-- Show previous pizza -->
        <div data-template="app:previousPizza"/>
    </div>
</div>

Спасибо.

1 Ответ

0 голосов
/ 27 октября 2018

Поскольку значение выбранной пользователем пиццы исходит из списка html, оно находится в $model.Ваша функция Xquery для кнопок «следующий / предыдущий» должна получить доступ к $ model, чтобы начать с того места, куда вы хотите.

Нам нужно посмотреть, как вы вызываете модули xquery в ваших .html файлах, чтобы вы работалипример кодаНо описанные вами проблемы, вероятно, возникают там.

См. Документацию по Использование модели для хранения данных приложения

...