2014-01-04 7 views
0

У меня странная ситуация, когда мой шаблон не отрисовка каждое полеПочему шаблон Spacebars не является полностью визуализированным?

Большое спасибо

'<template name="photog"> 
<h2>These are {{photographer}}'s stories</h2> 

{{#each photog}} 

     <img src="{{photos.[0]}}" alt="great image from a story"> 

     <div class="caption"> 

      <h3>{{storyName}}</h3> 

      <p>Photographer: {{photographer}}</p> 

      <p>Editor: <a href="/editor/{{editor}}">{{editor}}</a></p> 

     </div> 
{{/each}} 
</template>' 

ответ

1

Имя фотографа не доступно за пределами {{#each}} части шаблона, так как данные, возвращаемые из запроса вашего photog маршрута не имеют фотографа поля верхнего уровня:

{ 
    "photographer" : "Dean", 
    "editor" : "Dean", 
    "votes" : 0, 
    "photos" : [ 
     "/pics/wenick_20131110_171.jpg", 
     "/pics/wenick_20131110_182.jpg" 
    ], 
    "storyName" : "D2BS West 2013", 
    "_id" : "GCYR9MnYrrvxRSBQB" 
} 
{ 
    "photographer" : "Dean", 
    "editor" : "Dean", 
    "votes" : 1, 
    "photos" : [ 
     "/pics/wenick_20130409_149.jpg", 
     "/pics/wenick_20130409_158.jpg" 
    ], 
    "storyName" : "Bill's Party", 
    "_id" : "tCrFAm7X6vFSbiadC" 
} 

Вы можете добавить еще возвращаемое значение данных в photog маршрута (в client/helpers/router.js), так что это выглядит следующим образом:

return { 
      photog: Stories.find({photographer: this.params.photographer}), 
      photographer: this.params.photographer 
     }; 

... и убедитесь, что линия привязки имя фотографа (в client/views/stories/photog.html) заключается в следующем:

<h2>These are {{photographer}}'s stories</h2> 
+0

Прохладный. Спасибо. В этом есть смысл. – user3018742

0

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

{ 
    "photog": [ 
     { 
      "photographer": "name", 
      "editor": "name", 
      "photos": [] 
     }, 
     { 
      "photographer": "name2", 
      "editor": "name2", 
      "photos": [] 
     } 
    ] 
} 

{{#each}} проходит через вызванный массив фотогалок. Внутри каждой области переменной изменяется, чтобы вы могли напрямую обращаться к {{photographer}}.

Но за пределами каждого, что {{photographer}} должно содержать ссылку на шаблон? Он не знает. Одним из решений было бы жестко связать это с помощью помощника шаблона. Добавить что-то вроде этого на Ваш JavaScript:

Template.photog.photographer = function() 
{ 
    return "the name"; 
} 
+0

Интересно. Благодарю. это не то поведение, которое я ожидал, потому что имя фотографа одинаково для каждого «фотогара» – user3018742