如何将模板变量传递给模板助手函数以保留上下文



我可能用错了词来描述我的问题,所以这里是我正在使用的(简化)代码。

我很高兴能学到更好的方法,但我目前正在尝试将{{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;
};

正确的语法是:

{{#if agentIs ../assigneeId}}selected{{/if}}

{{#each-agents}}块助手在模板上下文树中引入了一个新级别(新上下文对应于当前代理),这就是为什么您需要从一个级别"返回"以正确引用assigneeId所在的上一个上下文。

最新更新