0

在我以前使用Zend Framework構建的項目中,我廣泛使用了Zend_view的「Action View」助手。它基本上允許從視圖腳本啓動一個單獨的請求 - >調度ti action-> view_rendering循環。在Rails中生成「widgetized」內容的最佳實踐是什麼

這裏是鏈接到zend framework reference guide的相應頁面(搜索「動作視圖助手」)。

這個助手是相當有例如部件化的內容與門戶佈局的頁面,你可以用不同的部件東西頁面上班的便捷方式(如廣告片段,貨幣告密者等)。

雖然,因爲它涉及到很多其他路由的這種做法不利的頁面響應時間的影響/派遣活動,它允許組織部件代碼和看法腳本到一個合理的結構。一個小部件只是一個控制器操作,帶有鏈接的視圖腳本。

不幸的是,我還沒有在Rails中找到任何類似的視圖助手。 有沒有什麼辦法在Rails中優雅地解決這個任務?

+0

雖然方便,但務必小心使用再次啓動整個調度週期的解決方案。當我和CakePHP一起工作時,這種模式也很常見,CakePHP文檔和render_component文檔都會評論它的速度有多慢,特別是如果您經常這樣做。 – 2011-03-04 06:29:11

回答

0

在Rails中,的ActionControllerrender方法以一個散列作爲參數,並輸出簡單的字符串。您可以在視圖中使用像這樣:

<%= render :partial => "shared/widgets/_#{widget.widgettype.name}", :collection => @current_user.widgets %> 

在這種情況下Rails會通過@ current_user.widgets對列表進行迭代,找到「應用程序/視圖/共享/部件一個部件的諧音/ _ widgettypename .html.erb「,併爲每個連接的小部件調用partial。

有關Rails部分的更多信息,請參見ActionView::Partials文檔。

+0

該配方告訴我我試圖避免的實際方式。問題在於,在部件傳遞給視圖之前,部件通常需要在模型和控制器部分中完成一些工作。 – cryo28 2010-09-12 12:23:08

+0

使用這種方法,我需要準備一個控制器中的所有數據,其控制器的視圖將調用控件部分。當然,一個小部件邏輯可以放入不同的類/幫助器中。但我需要將實際頁面與兩個獨立位置中的特定小部件相鏈接 - 在正在呈現頁面的控制器(準備小部件數據)和控制器的視圖腳本(實際呈現調用)中。我不喜歡它作爲它的「醜陋」在兩個地方激活一些程序的代碼以使它正常運行。 – cryo28 2010-09-12 12:32:12

+0

正如我在這個問題中指出的那樣 - Zend Framework通過運行一個單獨的request-> dispatch-> controller_action-> render循環,很好地解決了這樣一個任務 - 哪個結果(html)被放入視圖腳本中的某個位置。所以任何小部件只是一個簡單的控制器動作與assoicated視圖腳本。但我無法弄清楚如何在Rails中做到這一點。 – cryo28 2010-09-12 12:34:25

0

似乎我已經找到了我自己的問題的答案。它是「render_component」滑軌插件。還有a fork顯然支持Rails3。

+0

無法在一個答案中發佈兩個鏈接 - 垃圾郵件阻止機制阻止我這樣做。這裏是分支的鏈接 - http:// github。com/vhochstein/render_component/ – cryo28 2010-09-24 05:31:47

+0

您可能也有興趣[Apotomo,Rails widget構件](http://apotomo.de/)。我玩過它,它對於更復雜的東西來說很不錯。 [這是我的應用程序,遵循教程](http://apotomo-test.heroku.com/)。 – 2011-03-04 06:06:16

相關問題