我正在阅读Backbone.js源代码并且对这些行感到困惑(L230-238,v0.5.3)
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;
我是疯了还是最后一行是针对具有单个未定义属性的哈希对象运行验证?
似乎验证旨在在Model对象的实例上运行,并且要删除属性。
答案 0 :(得分:2)
你在评估它的作用时是正确的,但这是预期的功能。
当您调用未设置时,您只能告诉它一次取消设置一个属性:model.unset("myAttr")
取消设置时,调用验证以确保模型将进入有效状态。如果将属性设置为undefined将导致模型无效,则unset将失败。如果对于未定义的属性有效,则从模型中删除该属性。
它传递“具有单个未定义属性的哈希对象”的原因是javascript中的所有对象都是“哈希对象” - 键值对或关联数组。如何获得一个对象并不重要,它是一个关联数组。
在第236-237行中创建一个对象,该对象具有以未设置的模型属性命名的一个空属性。这样,使用传递给validate方法的对象进行修改不会改变模型本身的状态。
希望有助于解释事情。