Первое, что нужно понять, это то, что ваш parts
помощник а) не работает и б) это не то, что вам нужно.
- a)
bandmusic.find({parts})
не означает «вернуть массив частей из документов в коллекции bandmusic», что, как вам кажется, и требуется.
{parts}
является сокращением ES6 для {parts: parts}
(см. этот ответ ). Но ваша функция не имеет переменной parts
- поэтому в вашем find
вы на самом деле говорите «найдите документы, которые соответствуют условию {parts: undefined}
- б) Но это не имеет значения, потому что вам здесь не нужен помощник.
То, что вы пытаетесь сделать со своим вложенным #each
, это циклически проходить через каждый документ в базе данных, а затем внутри каждого документа проходить циклически по массиву parts
.
Ну, вы получаете документы от вашего pieces
помощника, и каждый документ содержит массив parts
, который вы можете просто циклически проходить без помощи помощника.
Ваш код должен работать, если вы просто удалите помощник parts
. Blaze имеет порядок поиска, который вы можете прочитать о здесь . Это означает, что когда Blaze видит parts
, он сначала думает: «Есть ли помощник по имени parts
?» - который есть, и он не работает, так что ничего не происходит.
Но вы хотите, чтобы он подумал: «Есть ли в текущем контексте данных поле с именем parts
», - оно есть, но helpers
идет выше в порядке поиска, поэтому оно никогда не попадает туда.
Таким образом, самое простое теоретическое решение - удалить помощника.
- d) Более четкое решение и лучшая практика
Как видно из ссылки lookup order
, часто неясно, что относится к тому, что в пробелах / Blaze. Вы можете сделать вещи намного понятнее, используя синтаксис, описанный в документах Blaze для each
Вместо #each array
вы должны ввести новую переменную для ссылки на текущий элемент в массиве - #each item in array
. А затем, как обычно, получите доступ к свойствам элемента - item.prop1 - item.prop2
Итак, ваш новый код становится:
{{#each piece in pieces}}
<tr class="itemList">
<td class="name">{{piece.name}}</td>
<td class="pdf">PDF</td>
<td class="audio">AUDIO</td>
<td class="format">FORMAT</td>
<td class="price" >${{piece.price}}</td>
<td><input class ="qty" type ="number" name ="quantity" value="0"></td>
</tr>
{{#each part in piece.parts}}
<tr>
<td colspan="3"></td>
<td class="partName">{{part.pname}}</td>
<td class="partPrice">{{part.pprice}}</td>
<td><input class="partQty" type="number" name="quantity" value="0"></td>
</tr>
{{/each}}
{{/each}}