2013-07-05 75 views
0

我正在使用Backbone構建一個大的HTML表單。每個表單字段都是稱爲Field的Backbone模型的實例。我有一個名爲Fields的Backbone集合,它獲取一個JSON文件並實例化所有表單字段。在Backbone集合中使用下劃線模板

這是我的問題:當我渲染表單字段的集合時,我不只是想要一個統一的表單字段列表。例如,大多數骨幹教程在線向您展示如何渲染集合,方法是將每個模型的視圖放在li中,集合元素爲ul

相反,我有一個HTML模板被分成部分,像這樣:

我想「月」和「年」字段是而另外一個DIV領域進入他們各自的divs。這些字段的樣式不同,使用CSS。 是否可以將大型下劃線模板傳遞給集合,並將其模型實例打印到適當的位置?

這是一個像Marionette.Region之類的用例嗎?

任何想法感謝!

+0

我認爲你不正確地使用Backbone。表單應該呈現一個模型,並且應該是一個模板,因爲你沒有真正地循環任何東西 – Bojangles

回答

0

我看到您的問題兩個主要途徑:

  1. 的更簡單的方法:讓你的表格是一個大ItemView控件和一個fields屬性傳遞一個表單模型(這將是您的收藏)。然後,在視圖中,您需要迭代並生成html。更清晰的方式:爲您的表單使用佈局,並將其他佈局渲染到「時間」,「位置」等區域(如Lilith建議的那樣)。例如,「時間」佈局將包含「月」和「年」視圖。反過來,「月」視圖將會是一個集合視圖,將集合中的每個選項呈現爲select標記的option

雖然第一個解決方案往往是容易實現(因爲它更接近傳統的無狀態Web開發),第二個會更容易管理。您可以在每個視圖(例如,選擇標籤)上註冊事件處理程序,而無需命名衝突,並且由於表單的複雜性將被分解爲單個部分,因此管理起來會更容易。

0

我不確定我完全理解你的問題,但我認爲你可能需要更多的信息在你的現場模型中。例如,您可以在字段模型中包含一個group屬性,然後使所有字段在其自己的div中形成相同的組。

這是你想要做什麼?

+0

這是一種可能性。我會爲每個「組」創建一個子視圖嗎? – chrx

0

我會選擇另一種方法: 將一個模板分解成至少不同的模板(時間,位置,VehicleInfo),因爲這些是三個不同的主題,我將在不同的視圖中處理。 之後,將時間視圖分解爲月份和年份視圖等。

因此,每個子視圖都有其自己的模型,其中包含用於呈現其HTML的值。我看到在這裏使用集合是沒有意義的 - 因爲你有不同的「字段」/模型。

之後,我會使用類似於窗體支持模型的東西,它代表窗體的當前狀態。因此,將formView作爲超級視圖執行,將其他視圖作爲嵌套視圖執行將是一個不錯的選擇。

var FormView = new Backbone.View.extend({ 

initialize: function(){ 
    //initialize all subviews 
    }, 
    events:{ 
     "change":"formChanged" 
    } 
    formChanged:function(element){ 
     //update formBackingObject aka this.model 
    } 
}); 

然後,您將所有視圖和一個模型分開,以表示當前選擇的狀態。