2011-06-08 53 views
8

我很想知道這一段時間,還沒有真正找到答案。結合Ruby on Rails和骨幹

爲什麼要在Rails應用程序中使用Backbone.js exaclty?它是擴展功能,爲你的JS有更多的MVC模式,建立更好的API ...?

目前我看不出一個理由,你爲什麼會想用它來做什麼,因爲我不認爲我瞭解Backbone.js的概念

+0

http://backbonetutorials.com可以幫助你開始。 – 2011-06-08 11:24:24

回答

5

軌道的一大好處是,你有一個平臺和一種你使用的語言來處理服務器代碼,並可以生成客戶端代碼(使用視圖)。

毫無疑問,這個理論上的優勢很快就會開始滑落,一旦你想改善你的用戶體驗與JavaScript和jQuery。所以實際上你仍然需要學習兩種語言。

但仍然:您的所有模型,業務規則......都是在Ruby的服務器端處理的。這也意味着服務器始終必須可以訪問。

什麼javacript /客戶端MVC(如Backbone.js,Sproutcore,...)可以爲您提供的是更原生的應用程序的感覺。單個網頁應用程序,例如Gmail中。 根據您的要求,這種平臺有一些非常有效的用例。例如。在連接性較低的地方或設備中,使用Web應用程序可能非常有用(使用HTML5),而這些應用程序不需要始終「在線」。它可以將數據和編輯保存到本地存儲並在設備重新聯機時同步回服務器/數據庫。

但是,在開發與Rails結合使用的客戶端MVC應用程序時存在很大的缺點:您將不得不做一些雙重開發(使用flex/silverlight時也是如此)。您的模型將需要在服務器和客戶端上定義。我可以想象,可以進行一些改進,例如在客戶端MVC上實際使用的是演示者類,在服務器端可以將它們存儲在不同的模型/表中。但仍然會有邏輯重複,型號...

所以這就是爲什麼我認爲對於大多數應用程序來說,目前切換到某些客戶端MVC框架並不明智。這將是更多的工作。

但是,如果您確實需要真正的本機應用程序或單頁面Web應用程序的外觀和感覺,那麼JavaScript客戶端MVC框架就是您的選擇。如果你確實需要一個客戶端MVC框架,我會建議Sproutcore

要簡化ajaxify您當前的rails應用程序(減少每個頁面的加載時間),請參閱pjax-rails

+0

爲避免重複,您可以使用瘦服務器。只是數據訪問和驗證。 – Raynos 2011-06-08 14:17:32

+0

是的,但是Rails使得創建模型非常容易,添加驗證......在Backbone/Sproutcore中,您將不得不重新定義模型,定義屬性,添加本地驗證,添加業務邏輯(可能不是服務器上需要更長時間?)。所以仍然會有重複的代碼。現在無法避免這種重複。 – nathanvda 2011-06-08 14:28:14

+0

避免是錯誤的詞。爲了減少重複,將一些生活在軌道上的代碼移到主幹上。但是使用瘦服務器(數據存儲和驗證)會失去RoR的優勢。唯一避免重複的方法是不使用rails。 – Raynos 2011-06-08 14:31:59

4

(比從未更好的遲到 - 希望這對某人有用) backbonejs網站上的描述看起來像很多沒有太多意義的詞語一起扔。圍繞它有一個大炒作,但什麼是大驚小怪?

骨幹背後的前提是現代單頁網絡應用程序(認爲gmail)很快成爲同步dom元素,UI事件和後端之間非常複雜的交互。你可以很容易地發現自己將數據存儲在DOM元素中,然後不得不以某種方式再次提取數據來更新數據庫。如果你不仔細地構建你的代碼,你很快就會得到充滿複雜綁定的意大利麪代碼,或者代碼沒有骨幹

使用骨幹的模型,集合和視圖爲您提供了一個深思熟慮的結構,可以讓您構建大型應用程序而不會被複雜性所淹沒。更重要的是,它與美妙的後臺結合在一起。

+0

所以你會說Backbone.js是爲單頁面Web應用程序的用例而構建的,而純粹的Rails解決方案在Web應用程序由多個頁面/屏幕組成的情況下運行良好? – 2014-05-14 14:14:33

+1

總的來說,是的。但是我會補充一點,即使你的應用程序由多個頁面/屏幕組成,但其中一些由大部分的JavaScript組成,仍然可以從使用主幹來構造代碼中受益。 你會在不使用控制器或模型的情況下在單個文件中寫入rails後端嗎?可能不會。同樣,如果您的前端代碼開始做些稍微複雜的事情,骨幹網將開始增加構建代碼的價值。 – 2014-05-14 14:28:22