Перебор хеша/словаря JSON

Несколько лет назад в JsRender была открыта проблема, позволяющая зацикливаться на объектах, а не просто массивы. Одним из приведенных примеров, который помог повторно открыть проблему, был это:

{
    joe:{
        name:  'Joe',
        status: 'out'},
    jane:{
        name: 'Jane',
        status:'in'},
    jill:{
        name:'Jill',
        status:'away'}
}

В конце концов, эта функция была реализована, но ни один из примеров, которые я нашел, не решает эту конкретную проблему, это всегда какое-то подмножество данных, как в примерах, приведенных в конце темы обсуждения, обычно выглядит примерно так из документации для for:

[
  {
    "name": "Pete",
    "address": {
      "city": "Seattle"
    }
  },
  {
    "name": "Heidi",
    "address": {
      "city": "Sidney"
    }
  }
]

Как я могу использовать for или props для перебора словаря, как показано выше? (не массив объектов) Что бы я ни пытался, я получаю сообщение об ошибке:

…ожидаемое выражение, получил ':'

Или все, что подходит для перестановки, которую я пытаюсь:

{{for :data}}
{{for :#data}}
{{for :}}

и т. д. Вполне нормально (по моему опыту) встречать словари с таким индексом в файле JSON, поэтому я удивлен, что не нашел для него примеров.

Любая помощь или понимание будут высоко оценены.

Я не использую JsViews, только JsRender v0.9.87.


person iain    schedule 14.07.2017    source источник


Ответы (1)


Здесь есть несколько примеров {{props}}:

http://www.jsviews.com/#propstag

В примерах у вас есть {{props address}}, но если вы хотите перебрать объект верхнего уровня, вы можете использовать либо {{props #data}}, либо {{props}} (поскольку объект, который вы хотите перебрать, является текущим контекстом данных...).

Синтаксис {{for :#data}} неверен (не уверен, откуда это взялось). Как говорится в сообщении об ошибке, там не должно быть двоеточия. Это будет {{for #data}} или {{for}}, если вы хотите перебрать текущие данные.

(Кстати, есть также тег {{jsonview}}, который также можно использовать с JsRender, а не только с JsViews. http://www.jsviews.com/#samples/tag-controls/jsonview. Не уверен, что это относится к вашим сценариям. На самом деле это пример, показывающий, как {{props}} работает на текущие данные, но с привязкой данных. См. также http://www.jsviews.com/#jsvpropstag@jsonview)

Вот новый пример (jsfiddle), который использует http://www.jsviews.com/#samples/editable/tags и заменяет массив фильмов хэшем фильмов. Вы можете увидеть использование {{props}} для перебора словаря верхнего уровня. Я добавлю образец на jsviews.com позже...

person BorisMoore    schedule 14.07.2017