1. 在 backbone 的 set 方法的源码中,有如下一段代码:
// Handle both `"key", value` and `{key: value}` -style arguments.
if (_.isObject(key) || key == null) {
attrs = key;
options = value;
} else {
attrs = {};
attrs[key] = value;
}
这段代码应该是分别处理以下两种情况的:
note.set({title: "March 20", content: "In his eyes she eclipses..."}, {silent:true});
此时,
attrs = {title: "March 20", content: "In his eyes she eclipses..."};
options = {silent:true}
book.set("title", "A Scandal in Bohemia");
此时,
attrs["title"] = "A Scandal in Bohemia";
options : 从代码中出以看出,此参数没有被初始化
当然,若改为下面这样的代码之后:
book.set("title", "A Scandal in Bohemia", {silent : true});
此时,
attrs["title"] = "A Scandal in Bohemia";
options :{silent : true}
2. 在set和save方法中, 均有如下一段代码:
// Run validation.
if (!this._validate(attrs, options)) return false;
也就是说,在真正执行set或者save方法之前,会执行上述代码(官方文档里也是这么说的)。
_validate 方法的源码原下:
_validate: function(attrs, options) {
if (options.silent || !this.validate) return true;
attrs = _.extend({}, this.attributes, attrs);
var error = this.validate(attrs, options);
if (!error) return true;
if (options && options.error) {
options.error(this, error, options);
} else {
this.trigger('error', this, error, options);
}
return false;
}
从源码中我觉得有两个地方是需要注意的:
① 当我们在set 或者 save 时,如果在 options 中传入了 {silent : true} 这个参数,那么,系统是不会调用 我们自己在Model中定义的validate方法的,因为在 _validate中第一行,就直接返回 true 了。
② 在Model中,我们自定义的 validate 方法中,如果校验失败,我们也不能直接返回 false ,而是返回一个字符串或者其他的对象,否则的话,从上面第四行,我们可以看到,该方法将返回true,这与我们想要的是相反的。
3.根据 2 中_validate方法的源码的第6行的 options.error(this, error, options); 来看,在校验失败之后,系统会调用一个 error 对应的 callback 方法,那么,这个callback 是怎么传进来的呢?答案就是,在 调用 set 方法时,将该 callback 作为一个 options 传进行来,可以参考下面的代码:
$("input[value='name']").click(function() {
var name = $("#name").val();
mt.set(
{name : name},
{error: function(context,msg,options) {alert(msg);}
});
});
将上面的代码对照着官方的 set 方法的说明来看,
model.set(attributes, [options])
应该会比较容易理解:
{name : name} 是作为 attributes 的,
{error: function(context,msg,options) {alert(msg);} 是作为 options 的
分享到:
相关推荐
Backbone.js是一款轻量级的JavaScript库,它引入了MVC(Model-View-Controller)设计模式,使得前端开发更加有组织和结构化。在Backbone.js中,View是负责处理DOM交互和用户事件的核心组件。以下是对Backbone.js框架...
EAST学习笔记1 EAST学习笔记1是关于 EAST 模型的学习笔记,EAST 模型是一种用于文本检测和识别的深度学习模型。该模型的架构清晰,主要由 Unet 作为主体结构,backbone 可以任选 feature extractor,使用 ImageNet ...
本篇笔记主要基于阮一峰的博客,探讨了两种常见的JS模块规范:CommonJS和AMD,以及如何使用require.js进行模块管理。 1. **CommonJS**:这是Node.js服务器端编程广泛采用的模块化标准。在CommonJS中,`require()`...
PTN学习笔记总结 PTN(Packet Transport Network)是一种以分组作为传送单位,承载电信级以太网业务为主,兼容 TDM、ATM 和 FC 等业务的综合传送技术。PTN 技术基于分组的架构,继承了 MSTP 的理念,融合了 ...
在Backbone.js中,View是MVC模式中的一个重要组成部分,它负责管理用户界面与模型数据之间的交互。在本文中,我们将深入探讨如何在Backbone.js中...学习和掌握这些基础知识,对于开发复杂的JavaScript应用至关重要。
【CCNA学习笔记】是关于Cisco Certified Network Associate(CCNA)认证的学习资料,涵盖了网络基础知识、TCP/IP协议、路由器配置、OSPF优化、密码恢复、VLAN等内容。 1. **网络基础知识** - ISO(国际标准化组织...
"YOLO5笔记1" 目标检测网络的基本结构 目标检测网络的基本结构可以分为三个部分:Backbone、Neck和Head。其中,Backbone是指用于提取特征的前面部分的神经网络,是目标检测网络的脊柱。Head是指对图像中的物体进行...
"Backbone.js Note App Example" 是一个用于学习和理解Backbone.js框架的示例项目。Backbone.js是一款轻量级的JavaScript库,它为构建结构化的Web应用提供了模型-视图-视图模型(Model-View-ViewModel, MVVM)架构...
通过学习骨干 安装 npm install ./node_modules/jspm/jspm.js install 浏览到index.html 主干笔记 initialize可用于监视模型的更改并在更改时将其持久化 要创建一个集合,您首先必须告诉它它基于哪个模型。 我想这...
根据提供的标题“OSPF学习资料”以及描述“OSPF笔记资料,系统地介绍了其原理和内容”,我们可以推断出这份资料主要围绕开放最短路径优先(Open Shortest Path First,简称OSPF)这一网络路由协议进行讲解。...
* 不同点:YOLOv5 锚点框是基于训练数据集自动学习的,而 YOLOv4 没有自适应锚点框。YOLOv5 采用的激活函数包括 leakyReLU 和 Sigmoid,YOLOv5 的中间隐藏层使用的是 leakyReLU 激活函数,最后的检测层使用的是 ...
存货每次我想学习一门新的网络语言时,我都会重新编写一个应用程序。 这次用golang。要做的事媒体的库存申请。楷模物品名称年笔记创建者_id 格式_id创造者名称笔记格式名称特征 索引页 所有媒体列表 按格式排列的...
总的来说,"backboneTestApp"是一个全面的Backbone.js学习资源,涵盖了模型、视图、集合、路由等多个核心组件的使用,同时也涉及到了数据验证、用户界面交互和状态管理等实际开发中常见的问题。通过深入研究这个项目...
所有版本原始概述厌倦了通过电子邮件向自己发送简短的笔记或链接,一旦您关闭手机,您想了解更多信息? 使用 Skratchpad 将它们保存在云端! Backbone 是 Skratchpads 用户界面的核心,大量借鉴了 TodoMVC 应用程序...
语言学习共享语言学习-commons.herokuapp.com 该应用程序的大部分内容都在 Rails User 模型和以下 Backbone 视图中,这些视图显示并向用户的笔记添加评论和修订: app/assets/javascripts/views/ShowNoteView.js app...