2010-01-12 77 views
1

在我的Rails應用程序中,我有一個名爲「Photo」和PhotosController的模型。正如所預料的那樣,我將RESTful路由到了URL,以便URL「/ photos」返回所有照片的HTML呈現列表(如縮略圖),「/ photos/foo」返回該照片的HTML呈現表示與「foo」的friendly_id。 (我也做XML,JSON和二進制表示,但它們在這裏不相關。)通過AJAX在Rails中獲取HTML部分內容

我想讓列表頁面顯示初始加載時照片縮略圖的一個子集,然後動態添加更多縮略圖到我的通過AJAX列表(特別是jQuery)。我已經有了能夠在照片/索引視圖中呈現單個照片列表項目(基本上是<li><img>)的HTML。由於jQuery可以inject HTML directly into the DOM,我認爲最好的辦法是將列表項代碼提取到一個局部,然後通過AJAX將該局部加載到列表中。

我的問題是:什麼是最好的方式來獲取HTML的部分和進入DOM?

(我已經有一個實現的想法;我會張貼它作爲答案,以允許適當的投票&評論)。

回答

3

我認爲最具REST風格的方法是將照片的列表項目表示/視圖作爲照片的子資源。這將涉及:

  • 創建一個新的照片:: ThumbnailsController
  • 路由 「/照片/:ID /縮略圖」 到此控制器(因此我的例子URL是 「/照片/富/縮略圖​​」)
  • 爲此控制器創建索引操作(可能沒有其他操作)
  • 使索引操作呈現包含列表項代碼的部分。 (在這一點上,部分全視圖可能是有意義的)。
  • 當我想將縮略圖添加到列表中時,將AJAX調用設置爲「/ photos /:id/thumbnail」。

雖然有一個局部/視圖的其他控制器/資源似乎有點矯枉過正。有沒有更好的辦法?

+0

您的解決方案看起來非常穩固,並遵守REST原則。 +1 –

+0

謝謝,我試圖做到這一點。問題是,對於大約2個HTML標籤來說,它似乎很麻煩:-P但是如果沒有其他的東西出現,我會去用它。 –

+0

「有一個局部/視圖的其他控制器/資源似乎有點矯枉過正」 - 同意,但爲了清晰起見,我也這樣做了。 +1 –

1

不是一個答案,而是一個建議:看看(查看源代碼)一些其他玩家如何完成無限滾動,如Bing's image search37 Signals Haystack(這當然也在Rails中)。

結果

(由Craig編輯)

草垛使得以"/listings.js"通話。這意味着他們可能在他們的responds_to調用中使用了不同的Rails格式。我認爲這一點,但我不喜歡它,因爲:

  • 它取決於在沒有被用於任何其他目的的URL的格式(js在這種情況下)(並永遠不會是)。
  • 它依賴於JavaScript(以及那個混雜的JS/HTML)來完成它的工作。我寧願爲了一致性,可重用性和可緩存性而使用純HTML。

Bing的無盡搜索JS被縮小了,所以我沒有花費太多時間來解開它。

+0

這是我討厭AJAX的一件事情:試圖弄清魔術發生在哪部分代碼中。 :-P –