2013-11-09 14 views
5

Devo fare qualcosa di sbagliato, ma non riesco a vedere ... Fondamentalmente se creo un controller/modello tramite sails generate controller products e nel file /controllers/ProductsController aggiungo alcune variabili a l'azione index come ad esempio:Custom view/action/controller non funziona in Sails JS

index: function(req, res) { 

    return res.view({ 
     myOne: 'World?', 
     myvar: 'hello???', 
     title: 'Yeap' 
    }) 

}, 

e quando controllo localhost: 1337/prodotti sicuramente abbastanza le variabili sono stampate all'interno del modello. Nota che non ho aggiunto una vista personalizzata e il mio file modello si trova a views/products/index.jade (sto usando Jade piuttosto che EJS). Tuttavia, se creo una visualizzazione personalizzata in /config/routes quali:

'/custom': { 

    view: 'custom', 
    controller: 'ProductsController', 
    action: 'customAction' 

} 

e nel mio ProductsController ho un'azione molto simile a quello descritto in precedenza:

customAction: function(req, res) { 

    return res.view({ 
     myOne: 'Hello?', 
     myvar: 'World???', 
     title: 'Yeap' 
    }) 

}, 

Le variabili non vengono stampati nel mio modello. Il modello è stato chiamato bene così come il controller e l'azione (così sembra). Qualcuno può spiegare cosa sto sbagliando?

+0

Dove hai posto la tua vista - custom.jade? – JohnGalt

+0

Ho aggiunto nella cartella Viste. Non sotto nessuna directory. Tuttavia, se l'errore era che la vista non veniva trovata, l'errore sarebbe diverso. La vista è stata resa bene, ma non è stato trasmesso alcun dato. – WagnerMatosUK

risposta

8

avete una scelta tra la denominazione della vista lo stesso nome la vostra azione customAction.jade se si desidera accedere tramite:

index: function(req, res) { 

    return res.view({ 
    myOne: 'World?', 
    myvar: 'hello???', 
    title: 'Yeap' 
    }) 

}, 

oppure è possibile accedere la stessa vista/template (ad esempio index.jade) da utilizzando questa sintassi:

customAction: function(req, res) { 

    return res.view('products/index', { 
    myOne: 'World?', 
    myvar: 'hello???', 
    title: 'Yeap' 
    }) 

}, 

ho un repo di lavoro utilizzando ejs here.

+0

Come posso ottenerli sul mio lato client javascript. Attualmente li sto mettendo su un tag div nascosto e tirandoli con jquery. C'è un modo più intelligente? –

+0

@ VampireCoder dipende da come lo si desidera utilizzare. Potresti semplicemente averlo nel tuo motore di template (se l'oggetto è un elenco di post che puoi scorrere attraverso il modello). Tuttavia, se vuoi utilizzarlo nel tuo lato client js, sfortunatamente sei bloccato con jQuery per ottenerlo come hai detto o facendo una chiamata ajax (ma questo sta cambiando parecchio). – WagnerMatosUK