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 - Fatal编程技术网

Backbone.js 视图应该设置模型数据吗?

Backbone.js 视图应该设置模型数据吗?,backbone.js,Backbone.js,我只是想找出一个可能很简单的问题 视图应该直接设置模型数据还是只调用更改自己数据的模型方法?这取决于您的编程风格。我总是直接设置它们。如果这个方法听起来不错,而且您喜欢面向对象(可能是Java/Microsoft-stack背景),那么风格应该是创建getter/setter方法 另一方面,如果您在“”阵营中(我也建议),那么您当然应该直接设置模型数据(正如我之前所暗示的,我自己也在这个阵营中) 也就是说,Backbone.js模型已经有了getter和setter方法.get和.set。您不应

我只是想找出一个可能很简单的问题


视图应该直接设置模型数据还是只调用更改自己数据的模型方法?

这取决于您的编程风格。我总是直接设置它们。如果这个方法听起来不错,而且您喜欢面向对象(可能是Java/Microsoft-stack背景),那么风格应该是创建getter/setter方法

另一方面,如果您在“”阵营中(我也建议),那么您当然应该直接设置模型数据(正如我之前所暗示的,我自己也在这个阵营中)


也就是说,Backbone.js模型已经有了getter和setter方法
.get
.set
。您不应该直接操作
.attributes
成员。我不确定你不应该阅读它,我经常这样做,而且还没有因为它而出现问题。

就像软件开发中的其他东西一样,“这取决于”

如果在视图中使用表单输入,并且只需要将这些输入中的数据输入到模型中,则直接设置数据。您可以通过多种方式执行此操作,包括输入字段中的“更改”事件,如下所示:

MyView = Backbone.View.extend({
  events: {
    "change #name", "setName"
  },

  setName: function(e){
    var val = $(e.currentTarget).val();
    this.model.set({name: val});
  }
});
另一方面,如果您正在启动业务逻辑和其他代码来设置模型中的数据(但实际上这只是作为业务逻辑的一部分),那么您应该在模型上调用一个方法

“状态机”将是一个很好的例子,说明您何时会这样做。或者,在我写的一个图像库中,我对选择要显示的图像有一些逻辑。如果已选择图像,请不要再次选择它。我在我的图像模型的方法中加入了这个逻辑:

Image = Backbone.Model.extend({
  select: function(){
    if (!this.get("selected")){
      this.set({selected: true});
    }
  }
});
如图所示,我喜欢按照一个简单的规则运行,即如果对set的调用没有逻辑,那么我就直接从我所在的位置设置它。如果在集合周围有任何与模型相关的逻辑,那么我把它放在模型中

无论哪种方式,当您确实想要设置数据时,都应该使用
set
方法。绕过此选项,直接通过
model.attributes
设置模型的属性将阻止大量主干代码触发,并可能给您带来问题