2

私の問題を説明するために間違った言葉を使用している可能性があるため、ここに私が取り組んでいる(簡略化された)コードがあります。

これを行うためのより良い方法を学べてうれしく思いますが、現在やろうとしているのは{{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;
};
4

1 に答える 1

3

正しい構文は次のとおりです。

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

{{#各エージェント}} ブロック ヘルパーは、テンプレート コンテキスト ツリーに新しいレベルを導入します (新しいコンテキストは現在のエージェントに対応します)。これが、以前のコンテキストを適切に参照するために、あるレベルから「戻る」必要がある理由です。 assigneeId が存在します。

于 2013-07-30T02:05:05.213 に答える