有一個在你的問題那麼多,這個答案並不容易,也不會是明確的。它也會很有見地。看看你帶來的框架清單,我看到了彼此難以比擬的非常不同的東西。我會嘗試以某種方式對它們進行分組,並將更多框架添加到列表中。
這裏的主要問題是沒有一個特定的框架的利弊。主要問題是:你要多少錢?你真的是指像Gmail或Grooveshark這樣的應用程序嗎?或者你的意思是像Stackoverflow - 一個動態的,並不簡單,但仍然是一個網站。讓我們考慮所有這些選項。也許,你只是想用一些小部件來增強你的網站,比如標籤,對話框,一些可拖拽/放置元素,文本編輯等等,而你不願意改變你的開發模式。我的意思是,你使用你最喜歡的Java/PHP/Ruby,不希望用JavaScript編寫很多應用程序的邏輯和行爲。在這種情況下,基於jQuery的插件式解決方案將爲您做到,特別是,jQuery UI和jQuery Mobile。
jQuery小部件遵循其插件系統。這通常意味着它們非常易於使用。爲了創建一個按鈕,你寫的:
$('#myButton').button();
現在,如果你想禁用它,你調用一個方法採用以下模式:
$('#myButton').button('disable');
和獲取或設置值,例如在滑動條或日期選擇器上,如下所示:
$('#mySlider').slider('value');
$('#mySlider').slider('value', 42);
如您所見,基於jQuery的解決方案沒有模型。所有的數據都保存在DOM中,並通過古怪的方法調用獲得。如果您需要動態處理您的數據,例如做一些複雜的驗證,在後臺加載一些東西,過濾或排序,然後你會發現這很快就會變得混亂。順便說一下,這就是爲什麼jQuery UI團隊尚未提供網格控制的問題 - 他們無法在沒有模型的情況下執行此操作。在jQuery Mobile中,您通過簡單的標記獲得了一個不錯的移動UI,但是沒有官方的方式在頁面之間傳遞數據。總結:如果你有一個多頁的網站,如果你發佈你的表單,然後使用jQuery UI或更輕的解決方案,如Twitter Bootstrap。
也許,您想要構建更復雜,更像應用程序的東西(單頁應用程序?)。你知道你需要在客戶端使用數據。你有什麼選擇呢?
您可以使用您提供的模型,數據綁定和創建Web應用程序的可能等手段很多JavaScript框架之一,並與他們爲什麼不jQuery UI的整合。或者您可以使用更完整的框架,如Kendo或Wijmo或jqWidgets。這些框架依賴於jQuery(Wijmo依賴於jQuery UI)並提供額外的數據操作手段。他們有一個數據模型。 Kendo實現了自己的解決方案(我認爲),而Wijmo和jqWidgets與流行的Knockout JS集成。
So Kendo和Wijmo屬於同時提供小部件/控件和一些支持模型的框架組。還有其他類似的框架,它們不是基於jQuery的,例如Dojo Toolkit。添加一些動態數據加載,你會得到一個有點複雜的Web應用程序。你還能想要什麼?
實際上,最重要的是被遺忘 - 你如何構建(組織)你的應用程序?如果您嘗試構建一個以RESTful方式與服務器通信的單頁應用程序,那麼如果您的應用程序沒有架構,您很快就會陷入混亂。這通常需要的功能是一些有關分離(MVC,MVVM),模板,路由和模塊管理。這是出現SproutCore和Sencha的地方。它們爲構建Web應用程序提供了一個全面的解決方案,其中小部件只是一小部分。
它可能看起來像了SproutCore和煎茶是贏家在這裏,因爲他們是最完整的解決方案,包括UI和業務邏輯,並構建應用程序。儘管所有的利弊,有一些缺點。有人說他們太重量級了,或者需要堅持他們的發展模式,你可能不喜歡。例如,在Sencha中,你用JavaScript描述你的GUI並使用Sencha的類型系統。這增加了一種沉重的感覺,那就是抽象和包裝,而你非常喜歡HTML,CSS和vanilla JavaScript的易用性。
但這不是唯一的方法。 Web的強大之處在於,有許多框架,庫,工具,smaller以及更大的工具,這將幫助您按照自己的喜好製作應用程序。例如,請考慮AngularJS。它本身不提供一套控制,但與Twitter Bootstrap結合成爲RIA的完整解決方案。或者,例如,查看EmberJS,這是來自創建重量級SproutCore的人的更輕量級框架。它也不會爲您提供一組小部件,但在我看來,它是應用程序的非常好的基礎。
所以這裏是我最後的想法而不是結論。所有這些框架通常會向您顯示它們的小部件集合,很好看主題和其他視覺材料。但真正重要的是如何實際開發你的應用程序,你將如何構建它,在哪裏實現你的邏輯。瞭解該框架提供了什麼,並思考是否可以替代缺失的內容。
儘管缺少我的問題的精度,這是一個很好的答案,它花光了我大部分的「霧都」。事實上,有很多JS庫,框架,進入這個世界的人可能會像我一樣有點混亂。關於架構,我正在用nodejs開發並遵循express.js Web框架。我期待着開發一個頁面的互動應用程序,我會討厭你提到的人:)感謝很多 – jviotti
很好的答案:) –