2014-01-22 51 views
5

在LinkedIn的鄉親一直在使用遊戲以有趣的方式來處理需要由許多不同的組件的網頁:http://engineering.linkedin.com/play/composable-and-streamable-play-appsGrails可以編寫響應嗎?

他們是如何做的關鍵組成部分的事實是,「行動」,在播放會返回完整的響應,因此可以通過更高級別的操作「組成」另一個響應。

Grails似乎並沒有真正返回任何東西(或者至少沒有具體的),並且當你在一個內部時沒有簡單的方法來調用另一個動作。

那麼,這種風格的構成響應可能與Grails?

+0

你也許可以使用Forward來做類似的事情:http://grails.org/doc/latest/ref/Controllers/forward.html。我沒有在你提供的鏈接上觀看視頻。所以拿一點鹽來吧。 – Gregg

+3

@gregg你應該看視頻:) –

回答

1

我看了視頻,真棒的東西。

我想不出任何方式來撰寫嚴格遵守Grails功能(你說得很好,沒有簡單的方法來從另一個動作調用一個動作),但你可以獲得一些好處在演示中結合Grails控制器模板渲染與Ajax調用(是的,這顯然只是一種解決方法)。

無論如何,我會成立了一個home.gsp定義主要佈局:

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

然後添加一些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是這樣的:

... 
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 
} 
... 

(我省略了模板_ section1.gsp和_ section2.gsp

只要AJAX調用返回的數據中,模板在頁面呈現。此外,各部分是獨立的,這意味着您可以編輯第1部分的內容和佈局,而不必擔心第2部分。爲了試試這個,我做了一個小的(並且夠醜陋,沒有太多時間)grails應用程序(https://github.com/nicosalvato/tochi)。

這就是說,也許你的問題更具理論性(「Grails如何處理函數式編程」這樣的問題)比實際更有效。隨意稱我爲白癡,如果我完全錯過了這一點:)

+0

我用這種方法看到的唯一問題是,它將合成的負擔放在瀏覽器上,這會增加請求的數量。 :(否則,是的,它確實實現了類似的行爲(是的,我的問題是部分理論上的,因爲我非常確定Grails不能用於大型管道式應用程序) – cdeszaq

+0

@cdeszaq你是完全正確的是這種方法所暗示的大量瀏覽器請求,這是我沒有指出的一個缺點。 – nicosalvato

相關問題