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
Javascript Backbone.js源代码通读_Javascript_Backbone.js - Fatal编程技术网

Javascript Backbone.js源代码通读

Javascript Backbone.js源代码通读,javascript,backbone.js,Javascript,Backbone.js,我正在阅读Backbone.js源代码,对这些行(L230-238,v0.5.3)有些困惑 我疯了吗,还是最后一行对具有单个未定义属性的哈希对象运行验证 似乎验证是在模型对象的实例上运行的,该实例的属性将被取消设置 您对其功能的评估是正确的,但这是预期的功能 调用unset时,一次只能告诉它取消设置一个属性:model.unset(“myAttr”) 取消设置时,将调用验证以确保模型处于有效状态。如果设置为未定义的属性将导致模型无效,则未设置将失败。如果未定义属性有效,则该属性将从模型中删除 它

我正在阅读Backbone.js源代码,对这些行(L230-238,v0.5.3)有些困惑

我疯了吗,还是最后一行对具有单个未定义属性的哈希对象运行验证

似乎验证是在模型对象的实例上运行的,该实例的属性将被取消设置


您对其功能的评估是正确的,但这是预期的功能

调用unset时,一次只能告诉它取消设置一个属性:
model.unset(“myAttr”)

取消设置时,将调用验证以确保模型处于有效状态。如果设置为未定义的属性将导致模型无效,则未设置将失败。如果未定义属性有效,则该属性将从模型中删除

它传递“具有单个未定义属性的哈希对象”的原因是javascript中的所有对象都是“哈希对象”——键值对或关联数组。无论如何获取对象,它都是一个关联数组

在第236-237行中创建了一个具有一个空属性的对象,该属性以正在取消设置的模型属性命名。这是为了在传递给validate方法的对象上蒙混过关不会改变模型本身的状态


希望这有助于解释问题。

确实有帮助,但我看不出如何在第236-237行中添加模型属性的副本。
void 0
是否比返回未定义的
做得更多?我可以看到正在检查的对象是
this
,它作为
this
传递给
\u performValidation
。如果我知道.validation(attrs)方法来自
\u performValidation
oops中的第397行,也许我会更容易理解!你说得对。。。这只是一个未定义的问题。我犯了个错误。修正了我的答案。
validate(attrs)
方法是您在模型中编写的方法。如果你不提供它,它就不会被调用。如果您确实提供了它,它将被调用:
MyModel=Backbone.Model.extend({validate:function(attrs){…})啊,好吧,这是有道理的。因此,这取决于
MyModel.validate(attr)
方法来获取
attr
——一个具有未定义值的对象哈希,并检查该键/值对是否会使
无效?对-它使用“已更改”(在本例中已删除)的属性运行
validate
方法,因此,您可以验证模型是否正确。参见文档中的示例好的,这现在是有意义的。我可以看到validate如何与
unset
一起工作,以进行类似
attr.key1!=无效的\u值
。它看起来像是一些验证,例如
(attr.key1+attr.key2).length!=2
会在他们不应该通过的时候通过——尽管这是一个令人费解的案例(除非我又错过了什么)。
unset : function(attr, options) {
  if (!(attr in this.attributes)) return this;
  options || (options = {});
  var value = this.attributes[attr]; // ?: value appears to be unused (?)

  // Run validation.
  var validObj = {};
  validObj[attr] = void 0; //void 0 is equivalent to undefined
  if (!options.silent && this.validate && !this._performValidation(validObj, options)) return false;