所以我知道在Backbone中有很多方法可以做,但由于我在这里没有很多很多经验,所以我想就最佳方法提出建议。
我有一个基本的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元素,并根据应用程序状态来回切换(方式更多的代码行)。
在这种情况下你们都会推荐什么?视图中的逻辑是更好还是更多的代码行和更少的逻辑视图?
答案 0 :(得分: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
});