簡體   English   中英

使用RoR創建單頁應用程序

[英]Creating single page applications with RoR

我是RoR開發人員,並且我一直在通過使用另一個js庫(例如骨架或angular)來研究單頁解決方案。

對於今天的RoR應用程序,我讓我的控制器呈現一個js文件,該文件存儲在我的views文件夾中,該文件使用jQuery for DOM在我指定的div中加載滿足我要求的html部分。 通過這種簡單的方法,我可以實現單頁應用程序,對嗎?

我剛才提到的方法有什么缺點? 有人可以解釋一下這種方法在鐵路上的優勢嗎? 或相反亦然? 還是只是一個偏愛?

您的簡單方法實際上就是在執行angular或骨干程序,因此可以,您可以通過這種方式構建單個頁面的應用程序。 但是,在我看來,您的簡單示例不會被視為單頁應用。 我認為這只是一個頁面。 單個頁面應用程序具有路由(具有不同URL的多個“頁面”)。 為此,您可以在更改部分內容時使用javascript的window.location來操縱url。 您將不得不處理嵌套的路由,以及當用戶直接進入瀏覽器中的子頁面(如/ contact)時的情況。

有很多棘手的邊緣情況要處理,而且自己實施可能很耗時,所以為什么不使用專門為此設計的框架呢? Rails是一個很棒的Web開發框架,但它不是為單頁應用程序而設計的。 Rails的設計目的是在服務器端呈現html頁面,並且它的大部分代碼正是這樣做的。 在Rails中構建一個單頁應用程序意味着承擔很多自重。 單頁應用程序真正需要的服務器端是JSON API和靜態文件服務器(例如NGINX)。

將呈現動態html的任務從服務器端移到瀏覽器意味着更多的javascript代碼。 使用普通的jQuery很容易使混亂。 jQuery是一個庫,而不是一個框架,這意味着jQuery不為您提供任何結構或代碼重用模式來使事情井井有條。 Angular和Backbone是MVC框架,例如Rails,但用於瀏覽器。 它們為您提供代碼組織,這對於結構良好,可測試,可維護的應用程序至關重要。 在純jQuery應用程序中,您經常會看到處理與DOM操作直接混合的數據模型的代碼(視圖)。 在MVC框架中,這被認為是有罪的。

因此,實際上,在構建單頁應用程序時是否應使用前端框架的問題與在構建傳統應用程序時應使用后端框架的問題相同。 您應該使用Rails還是僅使用Ruby? 當然,您可以只使用普通的Ruby,就像可以只使用普通的jQuery,但是為什么呢? 無需重新發明輪子。

您可以使用Tubolinks及其更好的表親WiseLinks之類的東西來獲得單頁面應用程序的錯覺,但由於需要大量路由或路由參數,因此它在客戶端和服務器上都是一團糟,因此服務器可以為客戶端所處的特定狀態。它很快變得混亂,發送回html和javascript以正確更新客戶端DOM並進行轉換。 我強烈建議完全避免。

通常最好讓服務器僅使用API​​並使用客戶端框架。 服務器變得如此簡單,這總是一件好事,此外,如果需要,您還可以支持本機移動應用程序。

盡管初步學習起來,我在Ember上還是取得了很多成功,它具有非常好的抽象性,包括路由/ URL狀態管理,對象屬性綁定和觀察,計算屬性以及車把模板和組件。 我還可以在幾分鍾內完成Oauth2身份驗證並開始工作。 API身份驗證是您需要牢記的。

我不是從Ember開始的,但是我在Backbone / Marionette中編寫了一個非常雄心勃勃的應用程序,在嘗試實現可重用組件和管理應用程序狀態時編寫應用程序時遇到了很多困難。 API身份驗證也不是那么簡單,並且需要大量復雜的自定義代碼。 我完全意識到我需要的抽象,並注意到Ember幾乎已經正確地確定了它,並且Backbone / Marionette距離我所需的距離還很遙遠,並不是說它對某些類型的應用程序沒有用,但我個人沒有回頭。 我能夠通過Ember獲得快速的勝利(即生產率的巨大提高),並且擁有更強大的框架,所以我改變了。 使用Ember的總代碼大小要小得多,因為我需要編寫的代碼要少得多。 當有人說框架ABC大於XYZ時,它令人深思。 誰在乎您的應用程序代碼是3倍大,更難編寫且執行更少。 如果您的應用程序很小或很小,並且有足夠的時間在其之上實現或拼湊自己的框架,並且認為自己可以做的更好,那么微型框架會很不錯。比您經驗豐富的經驗:)只需使用正確的工具進行工作,並記住您的框架可能會比頁面上的圖像小,因此在考慮框架大小時應將其放在透視圖中。

所有的Web框架都在發生重大變化,因此無論您選擇什么,都需要始終掌握最新信息。 Ember文檔非常好,盡管我知道情況並非總是如此。 我回避了Ember Data,這似乎是Ember的一個雄心勃勃且歷來有爭議的方面,而是使用Ember Model作為對我有用的低風險選項,這當然是對的。

如果您已經精通Angular等其他框架,那么請堅持使用它,如果它適合您。 有很多可供選擇的選擇Ember或Angular是不公平的,我只想說如果您選擇的框架對您來說效果很好,那就太好了,但是如果沒有的話,那么我就認為Ember是其中一個基於我自己的經歷,不是因為別人這么說。

坦率地說,如果您不確定,我建議您看一下TodoMVC來比較和對比框架,但是老實說,直到您憤怒使用它之前,您才知道真正重要的事情是什么。 我建議選擇列出2或3個框架,然后使用框架模板語言模擬最關鍵的視圖,定義一些使用夾具數據的模型,並查看最有效的模型。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM