2016-09-06 1 views
0

Я активно искал ответ на этот вопрос, поэтому, надеюсь, я не пропустил очевидное.Оператор поиска, чтобы включить частичное на Handlebars

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

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

я ожидал бы следующий код

{{#each data as |item|}} 
    {{> (lookup item 'type') }} 
{{/each}} 

искать типа собственности на каждого объекта в массиве, и включают в себя частичное с этим именем, но поиск вычисляет undefined.

Я видел примеры, показывающее это вместо

{{> (lookup . 'property') }} 

так мои вопросы:

  1. Что такое правильный способ обратиться к item в поиске?
  2. Что . и .. обратитесь к?

Спасибо.

EDIT: Добавлен объект данных и шаблон от фактического кода (объект данных был уменьшен и фактическое имя сущности изменен на «пункт», но в противном случае фактического код)

Из данных

{ 
    "_links": { 
     "self": { "href": "/item/342" } 
    }, 
    "itemId": "342", 
    "datetime": "2012-10-06T04:13:00+00:00", 
    "itemType": "ITEM_TYPE", 
    "content": { 
    } 
}, 

С шаблон

{{#each data as |item|}} 
    {{> (lookup item 'itemType') }} 
{{/each}} 

Ошибка

{ 
    description: undefined, 
    fileName: undefined, 
    lineNumber: undefined, 
    message: "The partial undefined could not be found", 
    name: "Error"… 
} 
+0

Ваш '# each' смотрит на меня, как будто он должен работать. Возможно, если вы поделитесь своим объектом данных, мы сможем выяснить, в чем проблема. '.' является псевдонимом для' this' и указывает на объект с областью действия. '../' указывает один уровень на объект родительской области. – 76484

+0

@ 76484 Спасибо. Вот что я подумал о '.' и' ..', но почему-то это не сработало для меня. Я ожидал, что либо «item», либо '.' передадут правильный объект для поиска, но это не так. Я добавил данные и сообщение об ошибке. – guioconnor

+0

Копая глубже, я обнаружил, что контроллер фильтрует поля данных перед их передачей в шаблон. Синтаксис действительно работает, но мне пришлось переназначить поле itemType, чтобы оно было видимым. – guioconnor

ответ

1

Найдено решение. Как отмечено в @ 76484:

. является псевдонимом для this и указывает на объект, находящийся под областью действия. ../ указывает один уровень на объект родительской области.

взгляда вверх в примере может быть сделано либо

{{#each data as |item|}} 
    {{> (lookup item 'itemType') }} 
{{/each}} 

или

{{#each data}} 
    {{> (lookup . 'itemType') }} 
{{/each}} 
Смежные вопросы