2013-01-10 19 views
0

所以我知道有很多方法在Backbone中做事,但由於我沒有在這裏的許多經驗,所以我希望有關最佳方法的建議。骨幹什麼時候構建邏輯到視圖vs獨立視圖

我有一個基本的CRUD應用程序,我有一個窗體來添加數據和一個窗體來編輯數據,它們本質上是一樣的。並且實際上被附加到相同的DOM元素。

因此,我可以將兩種形式包含在一個視圖中,並根據視圖是否有模型來提供相應的模板。類似這樣的:

var AddEditView = Backbone.View.extend ({ 
el: $("#add"), 
template: $("editTemplate").html(); 
render: function() { 
    if (this.model) { 
     var theTmp = _.template(this.template) 
     this.$el.html(theTmp(this.model.toJSON())); 
    } 
    else { 
     var theTmp = _.template($("#addTemplate").html()); 
     this.$el.html(theTmp); 
    } 
}, 

}); 我認爲這會起作用,但是我可能遇到任何事件的一些粘性問題(即事件被綁定兩次)。

或者我可以創建兩個完全獨立的視圖,這些視圖將附加到同一個dom元素,並根據應用程序狀態(更多行代碼)來回切換。

你會在這種情況下推薦什麼?在視圖中更多的邏輯更好或更多的代碼行和更少的邏輯視圖?

回答

2

假設這些字段是相同的,無論您是創建新模型還是編輯現有模型,我都建議只有一個視圖,並且只有一個模板。當你實例化視圖時,如果你正在創建一個新模型,只需實例化一個新模型並將其傳遞給視圖。否則,通過現有模型。

var AddEditView = Backbone.View.extend ({ 
    render: function() { 
     var theTmp = _.template(this.template) 
     this.$el.html(theTmp(this.model.toJSON())); 
    }, 
    someSaveEvent: function() { 
     this.model.save(); // This will POST if the model isNew() or PUT otherwise 
    } 
}); 

var model = new Model(); // If you're creating a new model 

var addEditView = new AddEditView({ 
    model: model 
}); 
+0

我當時很想這個,但是如果我在模型上有默認值,模板將會填充這些默認值,對吧? –

+2

是的......這不是默認值的重點嗎? – Lukas