2016-06-11 15 views
0

Ich habe eine Anwendung, die es Benutzern innerhalb einer Gruppe ermöglicht, die Nachricht jedes Mitglieds für die Gruppe zu betrachten und sie aus meiner Sicht mit {{#each comment}} aufzulisten. Ich möchte die Bearbeitung eines Kommentars auf die Kommentare beschränken, die mit dem angemeldeten Benutzer unter Verwendung von {{#if user.user_id}} verknüpft sind.Verschachtelt, wenn in jeder Anweisung

Ich habe versucht, eine if-Anweisung in jedem Abschnitt zu verschachteln, aber es versteckt nicht den Bearbeitungslink für diejenigen, die nicht mit diesem Fall übereinstimmen. Liegt das daran, keine else-Anweisung zu haben? Könnte es sein, dass das verschachtelte if von einem anderen Objekt stammt?

Hier ist meine Ansicht:

{{#each comment}} 
    <div class="col-md-7 col-md-offset-5 comment-card"> 
     <div class="comment-card-header"> 
      <p class="card-date">{{this.commentDateSlug}}</p> 
      <h3 class="card-title">{{this.title}}</h3> 
     </div> 
     <div class="comment-card-body"> 
      <p class="card-report-link">Report: <a href="{{this.commentLink}}" class="card-data-report-url">{{comment.reportLink}}</a></p> 
     </div> 

     {{#if user.user_id}} 
     <p>This is the user: {{user.user_id}}</p> 
     <div class="annotation-card-footer"> 
      <a href="/app/edit/{{this.commentId}}">Edit</a> 
     </div> 
     {{/if}} 
    </div> 
{{/each}} 

Hier die Route:

appRoutes.route('/') 

    .get(function(req, res){ 

     models.Comment.findAll({ 
      attributes: ['commentId', 'commentDate', 'dataDateStart', 'dataDateEnd', 'title', 'discovery', 'reportLink'], 
      order: 'commentDate DESC', 
      include: [{ 
       model: models.User, 
       where: { organizationId: req.user.organizationId }, 
       attributes: ['organizationId', 'user_id'] 
      }] 
     }).then(function(comment){ 
      res.render('pages/app/high-level-activity-feed.hbs',{ 
       comment: comment, 
       user: req.user 
      }); 
     }) 
    }) 
+0

Wenn Sie sind innerhalb der '# each' blockieren Sie sind im Rahmen Rahmen des aktuellen Elements iteriert werden. Um auf den Benutzer zuzugreifen, benötigen Sie den richtigen Pfad, um in den Kontext "../ user.user_id" zu gelangen. Siehe http://handlebarsjs.com/#paths – 76484

+0

@ 76484 danke für den Kommentar, aber nachdem Sie Ihre Anpassung '{{#if ../user.user_id}} \t \t

Dies ist der Benutzer: {{.. /user.user_id}}

\t \t \t \t {{/ if}} 'ich bin immer noch links mit dem Wert mit der user_id präsentiert für eine nicht angemeldeten Benutzers. – cphill

+0

Ich verstehe. Hat das Kommentarobjekt eine Eigenschaft user_id, die mit der Benutzer-ID des aktuellen Benutzers verglichen werden kann? – 76484

Antwort

1

Es klingt wie das, was Sie in Ihrer Vorlage zu tun ist, die div.annotation-card-footernur zu machen, für Kommentare, deren user_id gleich user_id des aktuellen Benutzers ist.

In Pseudo-Code, würde dies in etwa wie folgt aussehen:

if current_user.user_id equals comment.user_id: 
    render div 

Lenker keine Unterstützung für Vergleichsoperatoren hat, also werden wir brauchen, um unsere eigenen block helper zu schreiben. Es gibt die vorhandenen Ressourcen, wie dies zu tun, sehen this link, aber ich werde ein Beispiel nennen:

Handlebars.registerHelper('ifeq', function (value1, value2, options) { 
    return ((value1 === value2) ? options.fn(this) : options.inverse(this)); 
}); 

Jetzt, wo wir unsere Helfer registriert haben, können wir es in unserer Vorlage verwenden:

{{#ifeq this.user_id ../user.user_id}} 
    <p>This is the user: {{../user.user_id}}</p> 
    <div class="annotation-card-footer"> 
     <a href="/app/edit/{{this.commentId}}">Edit</a> 
    </div> 
{{/ifeq}} 

ein Vorteil der Verwendung eines Block-Helfer ist, dass wir einfach auf einem anderen Zweig heften können:

{{#ifeq this.user_id ../user.user_id}} 
    <p>This is the user: {{../user.user_id}}</p> 
    <div class="annotation-card-footer"> 
     <a href="/app/edit/{{this.commentId}}">Edit</a> 
    </div> 
{{else}} 
    {{! Non-current-user stuff goes here. }} 
{{/ifeq}} 
+0

Das hat perfekt funktioniert. Danke für Ihre Hilfe! – cphill

Verwandte Themen