2013-08-14 1 views
10

Ho iniziato recentemente a imparare come usare Sails.js e ho trovato un piccolo problema.Sails.js - passaggio di dati a una vista

Ho un modello chiamato richiedente, come segue:

module.exports = { 

    attributes: {  
    name: { 
     type: 'STRING', 
     required: true 
    }, 

    email: { 
     type: 'STRING', 
     required: true 
    } 

    } 

}; 

Ho costruito l'azione index di restituire tutte le istanze del modello Richiedente:

module.exports = { 
    index: function(req, res) { 
     Applicant.findAll().done(function(err, applicants) { 
      res.view({ 
       apps: applicants 
      }); 
     }); 
    } 
}; 

E questa è l'opinione che Sto usando:

<section id="applicants"> 
    <h1>List of applicants</h1> 

    <ul> 
     <% for (applicant in apps) { %> 
     <li><%= applicant.name %> <%= applicant.email %></li> 
     <% } %> 
    </ul> 
</section> 

Ancora, quando carico l'URL corrispondente, non riesco a vedere i miei dati visualizzato.

Ho letto la documentazione di Sails.js, ma non riesco a trovare cosa c'è di sbagliato nel mio codice.

Sarebbe bello se qualcuno potesse aiutarmi a risolvere questo problema.

Grazie!

risposta

10

Prova

<%= apps[applicant].name %> 

E 'proprio come for opere loop. applicant è un indice nell'array apps.

Edit: Modo migliore è quello di utilizzare javascript serie di costruito nel metodo forEach, perché in questo modo si evita di andare in bicicletta attraverso gli elementi, ereditato dal tipo apps s'(ad esempio, gli elementi, assegnati in questo modo: apps.__proto__.foo = {name: "bar"} o Array.prototype.foo2 = {name: "pi222"}).

<% apps.forEach(function(applicant) { %> 
    <li><%= applicant.name %> <%= applicant.email %></li> 
<% }); %> 

P.S. Ovviamente questo metodo di javascript (forEach) non funzionerebbe in IE < = 8 (se si considera di utilizzarlo nel browser). Ma siamo all'interno di NodeJs, che è stato costruito sulla parte superiore del motore V8. Quindi funzionerà comunque.

+1

Vedo! Molte grazie! –