2012-02-08 51 views
34

我是Backbone.js的新手。我已經通過了文檔。我的問題是 控制器概念在哪裏出現?換句話說,Backbone.js中的控制器是什麼?Backbone.js中的控制器

聽說路由器是控制器。如果是這樣,爲什麼它被認爲是一個控制器?我們可以開發簡單的基本應用程序嗎?在那種情況下,控制器是什麼?

回答

39

要在這裏清除的東西一點點。路由器不是控制器,它是一種定義客戶端路由映射的方法(類似於Rails的routes.rb)。這有助於將客戶端頁面路由到特定的操作/處理程序。這與控制器在模型和視圖之間提供一些編排的工作不同。實際上有多種方法可以使用Backbone來實現這一點。從Backbone's documentation引用:

模型和視圖之間的引用可以通過多種方式處理。有些 人喜歡有直接指針,其中圖對應1:1 模型(model.view和view.model)。其他人則傾向於使用中間的 「控制器」對象,以便將創建和組織 視圖編排到層次結構中。其他人仍然傾向於採用這種方法,而且總是會觸發事件而不是直接調用方法。所有這些 款式運作良好。

這帶來了三種不同的方法來實現這一點。第一個非常簡單,就是將模型對象作爲屬性包含在視圖中。

第二個建議包括執行這種編排角色的第三個組件。我相信這可以在相當大且複雜的應用程序中有所幫助。爲此,我鼓勵您查看Chaplin,這是一個使用Backbone.js的示例應用程序體系結構。這些人在分離事物方面做了很多工作,並將控制器的概念引入到架構中。

最後一種方法是建議使用事件來標記動作和調解器來處理這些動作。爲此,我鼓勵您查看調解器和發佈/訂閱JavaScript模式。

7

它與iOS Cocoa Touch框架的工作方式更類似,您不應該將其想象爲後端MVC,骨幹團隊本身甚至從未在其網站上提及MVC,以避免人們從後端MVC 。在骨幹網的視圖是所謂iOS中一個視圖控制器/ AppController中,通常你的主AppController的將是查看其設置爲你的應用程序的主包裝通常也將作爲一個全球性的發佈/訂閱系統和控制器爲您主要的應用程序邏輯使用。

路由器正是它所說的 - 它將路由轉換爲一組參數,並將它們傳遞給應用控制器以找出如何處理它們,加載哪些子視圖等(或者如果應用程序不太複雜,它可以加載/直接從路由器級別更改視圖) - 它曾經被稱爲控制器,但它被重命名爲(0.5我相信?)以清除這種混淆。

至少這是我們的做法 - 如果選中在野外多教程,你可能已經看到了,當涉及到骨幹有許多方法來這是很多開發者也有。這就是Backbone的美麗!在MV * :)

2

通常我會製作我自己的控制器,讓路由器做它的事情(捕捉路線並指向控制器動作)。這些控制器是自制的,只是javascript對象和方法。他們接受來自路由器的請求,收集正確的數據(集合,模型...)並採取必要的視圖,將它們合併並將數據傳遞到視圖中。

從那裏再次骨幹。

不過最近我來到了arcoss一個名爲backboneMVC的第三方骨幹插件。已經閱讀它的文檔,但還沒有嘗試自己。

它旨在接管您的路由器並根據您的控制器和您使用它定義的動作製作路線。

看看那個庫,但我不能答應什麼,因爲我還沒有自己建立一些東西。