Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/backbone.js/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Backbone.js 主干何时将逻辑构建到视图中,而不是拥有单独的视图_Backbone.js_Backbone Views - Fatal编程技术网

Backbone.js 主干何时将逻辑构建到视图中,而不是拥有单独的视图

Backbone.js 主干何时将逻辑构建到视图中,而不是拥有单独的视图,backbone.js,backbone-views,Backbone.js,Backbone Views,所以我知道在主干网中有很多方法可以做事情,但是因为我没有在这里的很多人的丰富经验,所以我想要关于最佳方法的建议 我有一个基本的CRUD应用程序,其中我有一个用于添加数据的表单和一个用于编辑数据的表单,它们本质上是相同的。并且实际上附加到同一个DOM元素 因此,我可以将这两个表单包含到一个视图中,并提供适当的模板,这取决于该视图是否具有模型。大概是这样的: var AddEditView = Backbone.View.extend ({ el: $("#add"), template: $("e

所以我知道在主干网中有很多方法可以做事情,但是因为我没有在这里的很多人的丰富经验,所以我想要关于最佳方法的建议

我有一个基本的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元素,并根据应用程序状态来回切换(多行代码)


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

假设无论是创建新模型还是编辑现有模型,字段都相同,我建议只使用一个视图和一个模板。实例化视图时,如果要创建新模型,只需实例化一个新模型并将其传递给视图即可。否则,传递现有模型

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

我也在考虑这个问题,但是如果我在模型上有默认值,模板将填充这些默认值,对吗?