在开始之前,需要了解
properties
是extend
方法中使用的称呼,attributes
是创建模型对象时使用的称呼,classProperties
是定义Backbone
中各个类的类属性。
事件
以下是 backbone 中事件相关的方法和知识
- on
- 用法,
Backbone.events.on(event,callback[,context])
,可以结合_.clone()
进行使用 - 可以添加自定义事件,和
trigger
结合使用 - 有命名空间
events:namespace
,比如change:name
- 使用
on
方法有第三个参数context
- off
- 用法,
object.off([event,[callback],[context])
- trigger
- 用法,
object.trigger(evetn,[*args])
- once
- 用法和
on
很像,区别在于绑定的回调函数触发一次之后就会被移除
- listenTo
- 用法,
listenTo(other,event,cakkback)
- 监听其他对象上的事件
- stopListening
- 用法,
stopListening([oter],[event],[callback])
- listenToOnce
- 用法和
listenTo
很像,区别在于绑定的回调函数触发一次后移除
// 在视图中
events: {
'click [role=edit]': function () {}
}
事件目录 (Catalog of Events)
关于集合的事件
- add
- 当集合上添加模型对象时触发
- 默认参数,model,collection,options
- remove
- 当集合上移除模型对象的时候触发
- 默认参数,model,collection,options
- reset
- 当集合中全部内容被替换时触发,比如
collection
的fetch
方法 - 默认参数,collection,options
- sort
- 当集合已经被重新排序时触发
- 默认参数,collection,options
关于模型的事件
- change
- 当一个模型的属性改变时触发
- 默认参数,model,options
change:[attribute]
- 当一个模型中该特定属性被更新时触发
- 默认参数,model,value,options
- destroy
- 当一个model被destroy时触发
- 默认参数,model,collection,options
- invalid
- 当模型在客户端验证失败的时候触发,
validate
选项 - 默认参数,model,error,options
关于请求的事件
- request
- 当 模型 或 集合 开始发送请求的时候触发
- 默认参数,
model_or_collection
,xhr,options
- sync
- 当 模型 或 集合 成功同步到服务器时触发
- 默认参数,
model_or_collection
,xhr,options
- error
- 当 模型 或 集合 请求远程服务器失败的时候触发
- 默认参数,
model_or_collection
,xhr,options
关于路由的事件
- route
- 当任何一个路由相匹配通过路由器触发
- 默认参数,route,params
route:[name]
- 当一个特定路由相匹配通过路由器触发
- 默认参数,params
特殊事件
- all
- 所有事件发生都能触发这个特别的事件
- 第一个参数是触发事件的名称
小技巧
silent的设定,可以不触发事件的回调函数
- 尽量少使用
silent:true
,向回调函数传入一个特定的判断参数
模型
模型类的方法
Backbone.Model.extend(properties,[classAttributes])
- 扩展父类已有方法,并且想要调用父类方法,需要明确指出并调用。下边的分类,是常用的方式
扩展模型类的选项
模型的选项,有时可以当作方法用
- constructor或initialize,在
new Backbone.model([attributes],[options])
时调用
-
options
可以设置collection:colName
,如果没有,当模型添加到collection
时会自动添加 -
options
可以设置parse:true
,当使用set
方法将数据setd到模型前调用parse
方法
- idAttribute,设置模型的唯一标识,默认是id
- defaults,可以使用一个函数代替
- sync,少用,用于重新定义
- 项目中应用,一般sync用来发送ajax请求,但有时只需要从已有数据中筛选出一部分,此时可以重写
- validate,函数
- 也可以使用
model.validata()
的方式 - 默认在
save
调用之前验证,也可以在set
之前验证,需要设置validate:true
- 不返回则通过检验,有返回值(可以是布尔类型,可以是字符串)则未通过检验
- validateError,当
validate
验证失败时候的返回值 - url
- 也可以使用
model.url()
的方式
- urlRoot
- 可以使用
model.urlRoot
的方式,也可以使用model.urlRoot()
的方式
模型对象的属性和方法
model代表是创建的模型对象,或称为模型实例
model.get(attribute)
model.set(attributes,[options])
- 触发模型对象的change事件
-
model.escape(attribute)
和get
类似,但是返回HTML转义版本的model属性值 model.has(attribute)
- 当该属性值 非undefined 或 非null,返回true
model.unset(attribute)
- 从内部属性对象中删除指定属性
- 触发模型对象的change事件
-
model.clear([options])
,从模型中删除所有属性 -
model.toJSON()
将模型中attributes浅拷贝 model.fetch([options])
- 将服务器中数据拉回,并映射到模型上,当发生改变的时候,会触发
change
事件 -
options
有success,error - 这两个事件接受
model,response,options
作为参数
model.save([attributes],[options])
- 当第一次保存模型,方法名为create,方式为post
- 当第二次保存模型,方法名为update,方式为put
-
model.save(attrs,{patch})
,方式为patch - 触发
change
事件,和request
事件,响应成功,会触发sync/error
事件。 -
options
有success,error,wait选项 - 一般顺序,先改模型,再同步到服务器上,如果想要等待服务器再设置新的属性,那么要添加属性
wait:true
。当出错时,模型上保持旧的。
model.destroy([options])
- 触发
destory
事件,和request
事件,响应成功,会触发sync
事件。 -
options
有success,error,wait
model.isValid()
- 可以运行
validate
检查模型状态
model.id
-
model.cid
当模型创建的时候自动生成的唯一标志符 -
model.attributes
模型内部对象 -
model.changed
改变的模型内部对象,一般不使用它,使用model.changedAttributes()
model.parse()
- 在
fetch
从服务器返回数据模型数据,以及save时执行。 - 接受默认参数
response,options
model.clone()
model.isNew()
- 没有 id 的模型就是新的
model.hasChanged()
- 在
change
事件中使用 - 参数是需要检验的属性名
model.changeAttributes([attributes])
- 在
change
事件中使用 - 该模型上改变的所有属性的集合
model.previous()
- 在
change
事件中使用 - 参数是需要检验的属性名
model.previousAttributes()
- 在
change
事件中使用 - 该模型上改变的所有属性旧值的集合
Underscore方法
Backbone代理了
Underscore.js
用来给Backbone.Model
提供的六个对象函数,使用的时候可以使用模型对象直接使用
-
keys
,获得可枚举属性的数组 -
values
,获得可枚举属性的属性值数组 -
pairs
,把对象转化成[key:value]
数组 -
invert
,返回一个 key 和 value 互换的对象副本,需要保证value是唯一的 -
pick
,过滤出对象的某些属性 -
omit
,将对象的某些属性过滤掉