Достаточно сравнить число со значением из диалога - PullRequest
0 голосов
/ 24 августа 2018

Я хочу иметь возможность прочитать значение, которое я установил в диалоговом окне, и использовать его в Sightly для управления тем, какой раздел кода отображается.Когда я попытался использовать приведенный ниже код, я получил эту ошибку: «Операнды не одного типа: сравнение поддерживается только для чисел».Я перепробовал так много разных исправлений и не нашел ничего, что бы работало, ни какой-либо документации для него.Является ли context = 'number' неправильным синтаксисом или я должен добавить что-то еще?

В ДИАЛОГЕ

<number
      jcr:primaryType="nt:unstructured"
      sling:resourceType="granite/ui/components/foundation/form/select"
      fieldLabel="Select Amount of Delivery Options"
      name="./number"
      value = "4" >
      <items jcr:primaryType="nt:unstructured">
          <four
               jcr:primaryType="nt:unstructured"
               text="Four"
               value= "4" />
         <three
               jcr:primaryType="nt:unstructured"
               text="Three"
               value= "3" />
         <two
             jcr:primaryType="nt:unstructured"
             text="Two"
             value= "2" />
         <one
             jcr:primaryType="nt:unstructured"
             text="One"
             value= "1" />
 </items> </number>   

В HTL

<sly data-sly-test="${properties.podnumber @ context = 'number' >= 1}">

1 Ответ

0 голосов
/ 25 августа 2018

Во-первых, в вашем диалоге есть name="./number, а в вашем HTL вы используете properties.podnumber, они не совпадают.

Чтобы ответить на ваш вопрос: нет способа сделать это, используя только зрение, context опция предназначена только для рендеринга (защита XSS) и не меняет значение.

Лучше всего использовать модель стропа, что-то вроде

Я предполагаю, что ваш диалог будет иметьname="podNumber"

@Model(
    adaptables = {Resource.class},
    defaultInjectionStrategy = DefaultInjectionStrategy.OPTIONAL)
public interface MyModel {

  @Inject
  int getPodNumber();

}

Слинг затем преобразует это значение в целое число, которое вы можете использовать в своем сравнении.так что вы можете добавить свою модель с помощью data-sly-use.myModel="package.name.MyModel", а затем использовать ее:

<sly data-sly-test="${myModel.podNumber >= 1}">

Кстати, все значения в вашем раскрывающемся списке больше или равны 1.

ПРИМЕЧАНИЕ: , как Флориан предложил в комментарии ниже, вы должны использовать логические проверки в модели, вместо того, чтобы сравнивать значения в HTL.например:

@Model(
    adaptables = {Resource.class},
    defaultInjectionStrategy = DefaultInjectionStrategy.OPTIONAL)
public class MyModel {

  @Inject
  int podNumber;

  boolean isLargerThanOne(){
     return podNumber > 1;
  }
...