Backbone何时构建逻辑到视图与具有单独的视图

时间:2013-01-10 22:36:07

标签: backbone.js backbone-views

所以我知道在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元素,并根据应用程序状态来回切换(方式更多的代码行)。

在这种情况下你们都会推荐什么?视图中的逻辑是更好还是更多的代码行和更少的逻辑视图?

1 个答案:

答案 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
});