Как выполнить итерацию по двум спискам в HTL/Sightly?

#html #list #markup #sightly

Вопрос:

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

Второй список, список значений, будет выглядеть примерно так:

 ['Apple', 'Orange', 'Grape', 'Melon']
 

У меня есть контрольный список с заголовками рядом с ним, но я не понимаю, как я могу реализовать использование второго списка в HTL, который будет существовать под каждым флажком.

 <div class="class1" data-sly-list.item="${model.titleList}"> 
        <ul>
            <li class="class2">
                <label class="class3">
                    <input type="checkbox" name="check" value="${item.code}">
                        <span>${item.name}</span>
                </label>
          </li>
       </ul>
</div>
 

Я все еще изучаю HTL, буду признателен за любую помощь!

Ответ №1:

Предполагая, что вы используете такую модель, как:

 use(function () {
    return {
        titleList: ['Apple', 'Orange', 'Grape', 'Melon'],
        descriptionList: ["This is an apple", "This is an orange", "This is a grape"]
    };
});
 

Тогда вы могли бы просто использовать рычаги itemList.index против второго списка:

 <sly data-sly-use.model="logic.js"></sly>
<div class="class1" data-sly-list.item="${model.titleList}"> 
    <ul>
        <li class="class2">
            <label class="class3">
                <input type="checkbox" name="check" value="${item}">
                <span>${model.descriptionList[itemList.index]}</span>
        </label>
    </li>
</ul>
 

Тем не менее, я считаю, что лучший подход-это иметь правильную модель:

 use(function () {
    return {
        items: [
            { title: "Apple", description: "This is an apple"},
            { title: "Orange", description: "This is an orange"},
            { title: "Grape", description: "This is a grape"},
            { title: "Melon", description: ""}]
    };
});
 

и визуализируйте его, не полагаясь на слабую связь между списками:

 <sly data-sly-use.model="logic.js"></sly>
<div class="class1" data-sly-list.item="${model.items}"> 
    <ul>
        <li class="class2">
            <label class="class3">
                <input type="checkbox" name="check" value="${item.title}">
                <span>${item.description}</span>
        </label>
    </li>
</ul>