2017-07-02 23 views
0

アポストロフィイベントモジュールに登録者のリストを追加する方法を設定しようとしています。私は新しいjoinByManyフィールドをモジュールに追加することができましたが、各登録者オブジェクトに登録日とカウントを保存する必要があることもわかりました。これに対応するために、私はjoinByOneユーザー、登録日付文字列、および登録数整数の配列からなる、次のフィールドを追加しました:複雑な配列の検索

addFields: [ 
    { 
     name: '_registrants', 
     label: 'Registrants', 
     type: 'array', 
     titleField: '_user.firstName', 
     schema: [ 
      { 
       name: '_user', 
       withType: 'apostrophe-user', 
       type: 'joinByOne', 
       idField: 'userId', 
       filters: { 
        // Fetch just enough information 
        projection: { 
         id: 1, 
         username: 1, 
         firstName: 1, 
         lastName: 1, 
         email: 1 
        } 
       } 
      }, 
      { 
       name: 'registrationDate', 
       label: 'Registration Date', 
       contextual: true, 
       type: 'string' 
      }, 
      { 
       name: 'attendeeCount', 
       label: 'Total Attendees', 
       type: 'integer' 
      } 
     ] 
    } 
    ] 

さて、私はに実行している問題は、私がしたいということです現在ログインしているユーザーが_registrants配列にあるかどうかに応じて、アポストロフィ - イベントページのshow.htmlテンプレートに 'Register'または 'Unregister'ボタンを表示します。以前は、joinByManyを使用してユーザーのリストを設定していたときに、JoinByManyのidsFieldで現在のユーザーのIDのインデックスを検索できました。しかし、私は何とか_registrantsをループして、同じことをチェックするために_user.userIdの各項目をチェックしなければなりません。どうすればいいのかわかりません。私はそれがテンプレートにいくつかのタイプのロジックになると推測していますが、これはどのようにnunjucksでこれを達成するのか分かりません。

ここ

は、私は現在、私はjoinByMany代わりのjoinByOnesの配列を使用していたときに、ユーザーを確認するために持っていたものです:

  {% if data.piece.userIds.indexOf(data.user._id) < 0 %} 
      <div class="event-controls-item"> 
       {{ buttons.major('Register for Field Trip', { action: 'register-event' }) }} 
      </div> 
      {% else %} 
      <div class="event-controls-item"> 
       {{ buttons.danger('Unregister for Trip', { action: 'unregister-event' }) }} 
      </div> 
      {% endif %} 

ありがとうございます!

答えて

1

あなたは最も簡単apos.utils.findを使用してこれを行うことができます。

{% set registrant = apos.utils.find(data.piece._registrants, '_id', data.user._id) %} 
{% if registrant %} 
    ... 
{% else %} 
    ... 
{% endif %}