2013-04-06 68 views
1

據我所知,如果您想一起使用backbone.js和node.js,通常使用node.js( express.js particulary)作爲後端API提供程序(加上其他功能,如持久性等),而backbone.js是前端引擎,它表示提供html模板,視圖,模型等Backbone.js視圖使用從Node.js(Express.js)注入的模板

我在互聯網和github上看到的骨幹項目通常以一個index.html開始,它直接執行一個javascript文件,用於實例化路由,集合,視圖等「類」。前端視圖負責監控HTML和CSS模板並自行管理視圖,如事件等。

當我看到一些像backbone.iobind(https://github.com/logicalparadox/backbone.iobind)這樣的項目時,會出現這個問題,它使用非常特殊的配置,我真的不明白它的工作原理。

如果您看到源代碼,那麼node.js服務器不僅負責API,還負責監測將由Backbone使用的html模板。我有很多疑惑:

  1. 誰執行骨幹前端,因爲是執行執行路由器,視圖,收藏和歷史的JavaScript沒有「指標」?

  2. 你如何同步由express.js注入的模板以及將要使用它們的backbone.js端的視圖?

  3. 什麼是backbone.js路由器類的目的,因爲您正在使用node.js路由器來監測東西?

  4. 爲什麼你使用這種架構,而不是其他更乾淨像我在開始描述的那個?

預先感謝您非常的幫助

+0

你想使用與服務器Socket.IO風格的溝通?如果沒有,這個Backbone.JS擴展不適合你。此外 - 它只處理一部分功能。您仍然可能需要路由器等。您一定需要模型和集合。甚至在他們的示例中:https://github.com/logicalparadox/backbone.iobind/blob/master/example/public/js/example.js – WiredPrairie 2013-04-06 20:01:01

+0

Hi @WiredPrairie,我知道它需要一個主幹路由器,但我不知道不知道爲什麼,就像我在第三個問題中所描述的那樣。我在其他項目中看到過這種模式,例如https://github.com/jedireza/drywall/。在此先感謝 – 2013-04-06 22:00:50

+0

如果您不需要跟蹤歷史記錄和頁面導航,則不需要路由器。 – WiredPrairie 2013-04-06 23:57:20

回答

5

幾天後研究,看到有關於它的網絡上沒有信息,我會回答我的問題。希望有些編輯能糾正錯誤的答案。我將要描述的是node.js和backbone.js應用程序的「主幹」,它從後端查看模板,而不是從前端查看,因爲社區現在正在發展。爲什麼開發人員選擇兩個選項之一?根據不同的變量:安全,裝卸和渲染速度等的方法總結:

A.基本上,第一個步驟是在express.js配置視圖目錄和模板引擎:

app.set('views', __dirname + '/views'); 
    app.set('view engine', 'jade'); 

B.在此之後,我們要找到所有靜態資源的中間件。當我們談論「靜態」的資源,我們談論圖像,JavaScript,HTML,CSS等,將在前端執行:

app.use(express.static(path.join(__dirname, 'public'))); 

如果快遞(或連接)發現一個index.html在/ public目錄中,它會運行它。如果不是,則必須通過快速路由系統創建路由。

C.我們是在express.js從後端檢查HTML的情況下。爲此,我寫的,我們需要一個路由系統,如:

app.get('/', require('./views/index').init); 
在這裏

,當express.js檢測到主畫面「/」用戶訪問,它會尋找和index.js文件位於內側/視圖父目錄(未/公共),並且將在這裏,其中index.jade將呈現和inyected到前端:

res.render('index'); 

D的index.jade將提供所需的資源。在我們的例子中,將提供必要爲這個.jade的CSS,將由Backbone.js的被requiere庫(jQuery的,骨幹網等),最後,兩個要素:

  1. 的JavaScript文件將加載backbone.js前端。在這裏,所有的文件將位於/ public目錄:

    script(src='/views/index.js') 
    
  2. 的index.jade也將提供所需的Backbone.js的意見模板:

    script(type='text/template', id='login') 
    

E.有有幾種不同的backbone.js配置。通常你從前端路由器啓動主應用程序,所有的對象都被初始化。但是同步index.jade文件,模板和執行javescript視圖的主要想法是在加載DOM後執行最後一個。因此,最好的辦法是使用下面的jQuery的一句話:

 $(document).ready(function() { 
     app.view = new app.View(); 
    }); 

也許有人會覺得這個總結是不必要的,但不知道有所有的前端之間的差異begginers,或混合HTML node.js後端+ backbone.js前端,我認爲會很有用。最重要的是,結構如何。也許這聽起來很瘋狂,但是互聯網上沒有關於如何構建它的信息。

問候

0

我沒有足夠的代表處點上你的答案邁克爾發表評論,所以我必須把它放在這兒,對不起。

無論如何,你會選擇生成的文件夾結構如下所示:

appname 
    |--models 
    | |--appmodel.js 
    |--public 
    | | |--webapp // extjs/backbone files 
    | | | |--models 
    | | | |--controllers 
    | | | |--css 
    | | | |--js 
    | | | |--img 
    | | | |--views 
    | | | | |--appview.ejs 
    | | | | |--extbasedview.ejs 
    |--routes 
    | |--router.js 
    |--app.js 

我發現here