簡體   English   中英

使用Spine.js的真實Webapp結構

[英]Real world webapp structure with Spine.js

我已經使用Spine.js和CoffeeScript進入JavaScript MVC已有很長時間了。 一段時間以來,我一直在開發Ruby on Rails,因此我了解模型,視圖和控制器應分別處理的內容(基於我的適度經驗)。 但是在Rails中,我們已經知道(通常而言),每個控制器基本上都是控制一堆視圖(或頁面)並一次處理一個或多個模型的東西。 (也許,如果我錯了,請糾正我,因為我不是專業人士,但我不得不承認)。

但是,我發現Spine在架構方面有一個完全不同的概念。 我閱讀了其文檔,並深入研究了其示例應用程序。 不幸的是,所有Spine示例應用程序都顯示了如何處理單頁應用程序,而在現實世界中,“大型”應用程序已不再是這種情況。 (如果Spine僅應用於“單頁應用程序”,請更正我)。

假設有一個網站(或應用程序),其中包含許多頁面/部分/模塊,如下所示:

1-主頁,例如顯示基於縮略圖的列表2-聯系人頁面3-當前用戶的配置文件管理頁面(普通CRUD)

每個頁面的主要結構(或布局)與帶有指向上述頁面的鏈接的頁眉,搜索輸入字段和注銷鏈接相同(我已經知道登錄頁面應該是分開的,因此我不會再問身份驗證)。

這里最棘手的部分是我真的無法弄清楚如何將整個部分綁在一起,我一直在問自己一些問題,這些問題是在Google和StackOverflow上搜索的,但沒有明確的答案。

1-“必須”僅將一個脊椎應用程序應用程序放在一頁中? 我的意思是,固定了頁眉和頁腳,但具有動態內容DIV,該DIV可根據用戶單擊頁眉的選項卡來加載和卸載視圖? 還是應該將每個頁面都視為獨立的脊椎應用程序?

2-一頁中有多個控制器嗎? 例如,應用程序主控制器和導航控制器(標題)?

3-每個控制器應該處理一個模型,還是與其關聯的模型,這是真的嗎? (在示例中,它們之間總是存在1到1的關系,例如任務模型和任務控制器)。

4-我應該在哪里將與接口相關的狀態變量存儲在我的應用中。 我應該創建一個“記住”當前用戶的模型,還是突出顯示哪個選項卡以供進一步參考? 還是應該將它們存儲到控制器中?

5-如果要成為一個單頁面應用程序(但包含許多部分或模塊),我是否應該為該頁面中的每個加載部分都具有一個控制器?

我知道對於經驗豐富的程序員來說,這可能是微不足道的問題,但是我真的不知道從哪里開始。 因此,如果有人可以引導我走上正確的道路,那就太好了。

提前致謝!

DD

我認為這是一個很好的問題。 我的答案會很廣泛,請耐心等待。

我的回答的實質是,您需要熟悉其他框架,以便了解您選擇的框架試圖解決的問題。 您的問題是可以理解的。 其他人則因缺乏一種做某些普通事情的“適當”方法而苦苦掙扎。 解決方案是根據示例,包裝程序/擴展和替代框架創建的。 也許,您應該尋找與Backbone有關的信息, Backbone啟發了Spine,但仍與此相似。

如您所說,您熟悉Rails的MVC。 然后是Spine的MVC方法,它是完全不同的。 這應該給您一個提示,即MVC(或通常為MV *)是具有廣泛不同實現的廣義概念。 好的,您可能會認為Rails畢竟是基於請求的服務器端框架,而Spine是基於客戶端事件的框架-因此區別是可以理解的。 嗯,客戶端JavaScript框架之間也沒有統一性。 例如,提到的骨干網具有所謂的視圖,實際上起着控制器的作用。 因此,我想Spine的創建者所做的一件事是為了清楚起見將Views重命名為Controllers。 Addy Osmani詳細解釋了JavaScript的MV *。 對JavaScript框架也有很好的概述

因此,Spine和Backbone的一個“問題”是它們不決定任何體系結構。 換句話說,他們不夠自以為是。 您可以根據需要使用它們,這一事實令人感到沮喪。 下面我嘗試回答您的問題:

  1. 使用Spine,應用程序不必是單頁應用程序(SPA)。

您可以創建一個包含多個頁面的應用程序,每個頁面都加載自己的控制器。 在這種情況下,可以在服務器上呈現視圖,並可以從生成的JavaScript引導模型。 當您不想要SPA,但仍想組織JavaScript或擁有一些可重用組件時,這很好。

但是,從Spine的功能集(例如路線)來看,它是在考慮SPA的情況下創建的。

  1. 通常,對於SPA和復雜的UI,最好將UI(小部件)的各個部分分開。 在Spine中,控制器是實現這種分離的手段。 因此,可以,使用多個控制器並使用控制器嵌套。 也許應該有一個最頂層的應用程序控制器。

  2. 這不是真的(沒有技術限制),盡管單一責任原則使事情變得更容易。

  3. 將這些變量存儲在相應級別的控制器中。 如果需要觀察這些值,則將它們存儲為模型,否則將它們存儲為控制器屬性。

  4. 您可以有一個App控制器,其中包含頁眉,頁腳,側邊欄控制器和活動頁面。 在“路線”中,創建一個相應的控制器,並將其傳遞給App控制器,該控制器將主要區域的內容替換為該控制器的元素。 這是一種可能的方法。

再來一次:

人們在主干/脊椎的應用程序架構方面缺乏具體性而感到困惑。 他們創建了一些解決方案,例如應用程序控制器,布局管理器等。 對於Backbone,您可以看看Marionette卓別林Thorax 通過向他們學習,您將能夠為您的Spine應用程序提出一個體系結構。 祝好運!

暫無
暫無

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

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