作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在阅读 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;
我疯了还是最后一行对具有单个未定义属性的哈希对象运行验证?
似乎验证旨在在删除了要取消设置的属性的模型对象实例上运行。
最佳答案
您对其功能的评估是正确的,但这就是预期的功能。
当您调用 unset 时,您只能告诉它一次取消设置一个属性:model.unset("myAttr")
取消设置时,将调用验证以确保模型将进入有效状态。如果属性设置为 undefined 会导致模型无效,则取消设置失败。如果该属性未定义是有效的,则该属性将从模型中删除。
它传递“具有单个未定义属性的哈希对象”的原因是JavaScript中的所有对象都作为“哈希对象” - 键值对或关联数组。如何获取对象并不重要,它是一个关联数组。
第 236-237 行创建了一个对象,该对象具有一个以未设置的模型属性命名的空属性。这样一来,对传递到验证方法中的对象进行胡闹就不会改变模型本身的状态。
希望有助于解释事情。
关于javascript - Backbone.js 源码通读,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7656053/
我是一名优秀的程序员,十分优秀!