Жидкие шаблоны - доступ к членам по имени - PullRequest
2 голосов
/ 08 июня 2010

Я использую Jekyll для создания нового блога.Он использует Liquid внизу.

Jekyll определяет определенные «переменные»: site, content, page, post и paginator.Эти «переменные» имеют несколько «членов».Например, post.date вернет дату публикации, а post.url вернет ее URL.

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

См. Следующий пример:

{% if my_condition %}
  {% assign name = 'date' %}
{% else %}
  {% assign name = 'url' %}
{% endif %}

У меня есть переменная с именем name, которая имеет значение 'date' или 'url'.

Как я могу сделать жидкий эквивалент post[name] в рубине?

Единственный способ, который я нашел, - это использовать цикл for для перебора всех пар (ключ-значение)post.Осторожно!Это довольно ужасно:

{% for property in post %}
  {% if property[0] == name %}
    {{ property[1] }}
  {% endif %}
{% endfor %}

Ммм!Я надеюсь, что есть лучший способ.

Спасибо.

Ответы [ 2 ]

2 голосов
/ 09 июня 2010

Я не знаю, о чем я думал.

post[name] - это абсолютно допустимая жидкая конструкция. Таким образом, приведенный выше код for-if можно заменить следующим:

{{ post[name] }}

Я думал, что попробовал это, но, видимо, я этого не сделал. D'ой!

Жидкость допускает даже более причудливые конструкции; следующий синтаксически корректен и возвращает ожидаемое значение, если post, element, categories и т. д. правильно определены:

{{ post[element.id].categories[1].name }}

Я очень удивлен жидкостью. Окончательно продолжу расследование.

1 голос
/ 06 декабря 2015

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

<!-- object myObj.test has the string value "this is a test" -->
{% assign x = 'test' %}
{{ myObj.[x] }}

Вывод: это тест

...