2013-11-09 8 views
5

Ich muss etwas falsch machen, aber ich kann nicht sehen ... Grundsätzlich, wenn ich einen Controller/Modell über sails generate controller products erstellen und in der Datei /controllers/ProductsController ich einige Variablen hinzufügen die Index Aktion wie zum Beispiel:Benutzerdefinierte Ansicht/Aktion/Controller funktioniert nicht in Sails JS

index: function(req, res) { 

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

}, 

und wenn ich localhost überprüfen: 1337/Produkte sicher genug, um die Variablen in der Vorlage gedruckt. Beachten Sie, dass ich keine benutzerdefinierte Ansicht hinzugefügt habe und meine Vorlagendatei sich unter views/products/index.jade befindet (ich verwende Jade anstelle von EJS). Allerdings, wenn ich eine benutzerdefinierte Ansicht in /config/routes wie schaffen:

'/custom': { 

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

} 

und in meinem Products habe ich eine sehr ähnliche Wirkung wie zuvor beschrieben:

customAction: function(req, res) { 

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

}, 

Die Variablen werden nicht in meiner Vorlage gedruckt. Die Vorlage heißt in Ordnung, also ist der Controller und Aktion (so scheint es). Kann mir jemand erklären, was ich falsch mache?

+0

Wo haben Sie Ihre Ansicht platziert - custom.jade? – JohnGalt

+0

Ich habe im Ordner Ansichten hinzugefügt. Nicht unter irgendeinem Verzeichnis. Wenn der Fehler jedoch darin bestand, dass die Ansicht nicht gefunden wurde, war der Fehler anders. Die Ansicht wurde gut wiedergegeben, aber es wurden keine Daten übertragen. – WagnerMatosUK

Antwort

8

Sie haben die Wahl zwischen der Benennung der Ansicht den gleichen Namen wie die Aktion customAction.jade, wenn Sie es über zugreifen möchten:

index: function(req, res) { 

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

}, 

oder Sie können die gleiche Ansicht/template zugreifen (zB index.jade) durch mit folgenden Syntax:

customAction: function(req, res) { 

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

}, 

ich eine Arbeits Repo habe mit ejs here.

+0

Wie kann ich sie auf meine Clientseite Javascript bekommen. Momentan setze ich sie auf ein verstecktes div tag und ziehe sie mit jquery. Gibt es einen klügeren Weg? –

+0

@VampireCoder hängt davon ab, wie Sie es verwenden möchten. Sie erhalten es möglicherweise nur in Ihrer Template-Engine (wenn Sie das Objekt in einer Liste von Posts finden, die Sie in der Vorlage durchlaufen können). Wenn Sie jedoch beabsichtigen, es innerhalb Ihrer Client-Seite js zu verwenden, stecken Sie unglücklicherweise entweder mit jQuery fest, um es wie erwähnt zu erhalten oder einen Ajax-Aufruf zu machen (aber das ändert sich ziemlich viel). – WagnerMatosUK