Как поместить цепочечные условия в привязку свойства в представлении XML? - PullRequest
1 голос
/ 14 февраля 2020

У меня есть следующий код для одного из представлений моего приложения (InvioceList.view. xml).

Код, который отлично работает:

numberState="{= ${invoice>ExtendedPrice} > 50 ? 'Error' : 'Success'}"

Свойство numberState управления ObjectListItem позволяет мне менять цвет суммы счета в зависимости от тарифа.

Hello-world app

Однако код это работает только два цвета. Я хочу сделать это с тремя (Success для зеленого, Warning для желтого и Error для красного). Поэтому, чтобы сделать это, я попытался с этим:

<ObjectListItem
  numberState="{= ${invoice>ExtendedPrice} > 20 ? 'Success' : ${invoice>ExtendedPrice} > 50 ? 'Error' : 'Warning'}"
/>`

Код, который не работает нормально:

numberState="{= ${invoice>ExtendedPrice} < 20 ? 'Success' : ${invoice>ExtendedPrice} > 60 ? 'Error' : 'Warning'}"

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

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

1 Ответ

4 голосов
/ 15 февраля 2020

Если я правильно понимаю ваш вопрос:

Ваши интервалы определены неправильно. Прямо сейчас у вас есть

Если цена выше 20, покажите успех. Если оно выше 50, покажите ошибку. Иначе показывать предупреждение.

Эти утверждения проверяются именно в этом порядке.

Допустим, у вас есть цена 80.

Это выше, чем 20? Да, это так, так показать успех. Не нужно проверять остальное, так как первое условие уже соответствует.

Если вы хотите три интервала, не начинайте со среднего.

<ObjectListItem numberState="{= ${invoice>ExtendedPrice} > 50 ? 'Error' : 20 >= ${invoice>ExtendedPrice} ? 'Warning' : 'Success' }" />

Если вы хотите чтобы начать со среднего, сделайте ваше условие более строгим.

Например, «если оно больше 20, но меньше или равно 50, то успех».

<ObjectListItem numberState="{= ${invoice>ExtendedPrice} > 20 &amp;&amp; ${invoice>ExtendedPrice} &lt;= 50 ? 'Success' : ${invoice>ExtendedPrice} > 50 ? 'Error' : 'Warning' }" />

& и <являются специальными символами в XML, поэтому вы должны избегать их. </p>


Но вы видите, это трудно отлаживать и трудно читать. Я настоятельно рекомендую функцию форматирования .

Вы можете отладить ее (поскольку она проста JavaScript) и записать читаемые троичные выражения или операторы if / else.

...