Как передать переменную шаблона в вспомогательную функцию шаблона, чтобы сохранить контекст?
Возможно, я использую неправильные слова для описания своей проблемы, поэтому вот (упрощенный) код, с которым я работаю.
Я счастлив узнать лучший способ сделать это, но то, что я сейчас пытаюсь сделать, это пройти {{assigneeId}}
к вспомогательной функции шаблона под названием agentIs
, Проблема в том, что я не могу найти правильный способ передать значение.
<template name="ticket_list">
{{#each tickets}}
{{> ticket}}
{{/each}}
</template>
<template name="ticket">
<h3>{{title}}</h3>
<p>{{assigneeId}}</p>
{{> ticket_footer}}
</template>
<template name="ticket_footer">
{{> agent_list}}
</template>
<template name="agent_list">
<!-- {{assigneeId}} exists here as expected -->
assigneeId: {{assigneeId}}
<label for="agent">Agent</label>
<select id="agent" name="agent">
{{#each agents}}
<!-- value passed: "{{assigneeId}}" -->
<option value="{{_id}}" {{#if agentIs "{{assigneeId}}"}}selected{{/if}}>
{{profile.name}}
</option>
<!-- value passed: undefined -->
<option value="{{_id}}" {{#if agentIs assigneeId}}selected{{/if}}>
{{profile.name}}
</option>
<!-- value passed: JSON.parse error -->
<option value="{{_id}}" {{#if agentIs {{assigneeId}}}}selected{{/if}}>
{{profile.name}}
</option>
{{/each}}
</select>
</template>
Template.agent_list.agents = function() {
return Meteor.users.find({"profile.is_agent": true}, {sort: {profile: 1}});
}
Template.agent_list.agentIs = function(assigneeId) {
return this._id === assigneeId;
};
1 ответ
Решение
Правильный синтаксис будет:
{{#if agentIs ../assigneeId}}selected{{/if}}
Помощник по блоку {{#each agents}} вводит новый уровень в дереве контекстов шаблона (новый контекст соответствует текущему агенту), поэтому вам нужно "вернуться" с одного уровня, чтобы правильно ссылаться на предыдущий контекст, где assigneeId находится постоянно.