2014-01-22 11 views
5

Die Leute bei LinkedIn über haben auf interessante Weise abspielen wurde mit Seiten zu behandeln, die aus vielen verschiedenen Komponenten zusammengesetzt werden müssen: http://engineering.linkedin.com/play/composable-and-streamable-play-appsKönnen Grails Antworten schreiben?

Die kritische Komponente, wie sie es tun, ist die Tatsache, dass „Aktionen“ in Spielen Sie volle Antworten zurück und können Sie so durch eine übergeordnete Aktion in eine andere Antwort "hineinkomponiert" werden.

Grails scheint nicht wirklich zurück irgendetwas von Aktionen (oder zumindest nichts bestimmtes), und es gibt keine einfache Möglichkeit, eine andere Aktion aufzurufen, wenn Sie in einem sind.

Also, ist dieser Stil von zusammensetzen Antworten möglich mit Grails?

+0

Sie könnten wahrscheinlich einen Vorwärts verwenden, um etwas ähnliches zu tun: http://grails.org/doc/latest/ref/Controllers/forward.html. Ich habe das Video nicht über den von Ihnen bereitgestellten Link angeschaut. Nimm das mit einem Körnchen Salz. – Gregg

+3

@gregg sollten Sie das Video ansehen :) –

Antwort

1

sah ich das Video, fantastisches material.

ich nicht von irgendeiner Weise zu Antworten komponieren denken kann strikt an Grails Funktionen kleben (Sie sagte, es gut, gibt es keine einfache Möglichkeit, eine Aktion von einer anderen Aktion zu nennen), aber Sie können einige der Vorteile erhalten gezeigt in der Präsentation kombiniert Grails Controller Vorlage mit Ajax-Aufrufen Rendering (ja, ist dies eindeutig nur eine Behelfslösung).

Auf jeden Fall hatte ich die Einrichtung eines home.gsp das Haupt Layout definieren:

<html> 
<head></head> 
<body> 
    <div><h1>Title</h1></div> 
    <div id="section1"></div> 
    <div id="section2"></div> 
</body> 

Dann fügen Sie einige Ajax:

$(document).ready(function(){ 
    $.ajax({ 
     type: "POST", 
     url: "${g.createLink(controller: 'home', action: 'section1')}", 
     dataType: "html", 
     success: function (data){ 
      $('#section1').html(data); 
     } 
    }); 
    $.ajax({ 
     type: "POST", 
     url: "${g.createLink(controller: 'home', action: 'section2')}", 
     dataType: "html", 
     success: function (data){ 
      $('#section2').html(data); 
     } 
    }); 
}); 

Homecontroller würde wie folgt aussehen:

... 
def section1() { 
    // Some code to fetch cool data... 
    render template: 'section1', model: data 
} 
def section2() { 
    // Some code to fetch cool data... 
    render template: 'section2', model: data 
} 
... 

(Ich lasse die Vorlagen _ section1.gsp und _ section2.gsp.)

Sobald die Ajax-Aufrufe, die Daten zurückgibt, werden die Vorlagen in der Seite dargestellt. Außerdem sind die Abschnitte unabhängig voneinander, was bedeutet, dass Sie den Inhalt und das Layout von Abschnitt 1 bearbeiten können, ohne sich um Abschnitt 2 kümmern zu müssen.

Nur um das auszuprobieren, machte ich eine kleine (und hässliche genug, hatte nicht viel Zeit) Grails-Anwendung (https://github.com/nicosalvato/tochi).

Dies sagte, vielleicht war Ihre Frage eher theoretische (eine Frage, wie Grails mit funktionalen Programmierung befasst) als praktisch. Fühlen Sie sich frei, mich einen Idioten zu nennen, wenn ich total den Punkt verpasste :)

+0

Das einzige Problem, das ich mit diesem Ansatz sehe, ist, dass es die Last des Compositings auf die Browser setzt, was die Anzahl der Anfragen ankurbelt. :(Ansonsten ja, wird es ein ähnliches Verhalten erreichen (und ja, meine Frage ist Teil theoretisch, da bin ich ziemlich sicher, dass Grails kann nicht für Big-Rohr verwendet werden. - Stil Anwendungen). – cdeszaq

+0

@cdeszaq Du bist Ich habe absolut recht mit der großen Anzahl von Browseranfragen, die mit diesem Ansatz verbunden sind, ein Nachteil, auf den ich nicht hingewiesen habe. – nicosalvato