04Backbone系列

数据模型

model可以对应到数据库中的某条数据

创建数据模型

// 定义某类的默认模型值
var Book = Backbon.Model.extend({
    defaults: {
        name: 'unknown',
        author: 'unknown',
        price: 0
    }
});
// 设置实例的模型值
var book = new Book({
    name: 'yf',
    author: 'noting',
    price: 11
});
  1. 从Backbone模块继承的子类都有静态属性__super__,静态属性和静态方法就是不用创建实例就可以使用的方法

初始化和读取数据

  1. 通过new初始化数据
  2. 通过以下方法读取数据
  • modelInstance.get()
  • modelInstance.escape()防XXS攻击
  • modelInstance.previous()获取模型改变之前的数据,××但是××只能在change事件和属性事件中使用
  1. 所有的数据存储在modelInstance.attributes中,但是不建议用它获取数据和改变数据
  • model.previousAttributes()使用场景和previous相同

修改数据

  1. modelInstance.set()
  2. 当修改数据时,会出发change事件。通过modelInstance对事件的监听,作出响应
  3. change事件的两个参数,model模型本身,当是属性事件的时候有第二个参数value
// 一般这种会通过 listenTO 放到 view 中,因为监听model 上事件,一般是 view 作出改变
// 是否触发change事件和属性事件,是看值是否发生了改变。如果没有,即使set,也不触发
modelInstance.on('change',function () {});
// 属性事件
modelInstance.on('change:name',function () {});

数据验证

数据验证这一项是个函数,该函数会在模型数据发生改变之前进行进检验。有返回值,无论什么,return false都是没有通过验证。不返回值的时候,通过验证

  1. 数据验证对应有error方法,modelInstance.on('error',function(){})
  2. modelInstance.set可以添加对象,设置该对象的silent选项,本次不会进行validate检验,但是下次set并且没有silent时,还是会触发。同时,当本次设置出错时,不会报错,不会出发change事件
  3. modelInstance.set可以添加对象,设置该对象的error选项。优先于error事件
  4. error事件,有两个参数modelerror。第一个模型对象,第二个是validate中返回的数据。
// 简单类型
var Book = Backbone.Model.extend({
    validate: function (attrs) {
        // attrs 是实例上的attributes 
    }
});

删除数据

会触发change事件,当删除模型中某个数据项时,再获取为undefined

  1. modelInstance.unset(name)
  2. modelInstance.clear()

将模型数据同步到服务器

  1. 数据标识。模型向服务器发送请求,比如修改或者删除,但是需要带上model的id。这个是model发送请求的时候,自动添加的。
  2. url规则。urlRoot方式,发送请求是请求地址加上数据标识。url方式,发送请求没有数据表示。两者的区别
  • urlRoot方式,服务器接口根目录,但是我们无权访问,需要使用id组成最终地址。优先级第三。
  • url方式,服务器接口地址是已知的,这个地址对应的操作无需模型的id。优先级第二。
  • modelInstance.set第三个参数对象可以添加url选项。优先级第一
  1. 数据和服务器数据进行同步。
  • modelInstance.save(),这个方法向服务器发送请求,同时将响应数据设置给模型。但是,设置给model的时候,会先经过parse
    • 该方法,可以设置第一个参数,数据对象
    • 第二个参数,wait选项,后台无响应或响应出错,model不会改变
    • 第二个参数,url选项
    • 第二个参数,success选项,error选项
    • 当使用save时,内部自动调用isNew。此时,如果没有id,将被认为是新的数据,使用post方式发送。如果服务器不返回带有id的响应数据,那么再次使用save时,依旧会使用post方式发送
    • 使用save的时候会触发三个事件,changerequest,sync/errorchange发生的事件不定。因为set发生在什么时候是可以配置的,如果有validate还可能会触发errro事件。
    • 使用save方法后,可以设置回调,但是回调中一般不要有对模型的改变,可以在change事件中改变
    • 使用parse方法对返回数据进行处理,然会return,这样模型上数据能够结构正确
  • modelInstance.fetch()
    • 参数和save的第二个参数相同
    • 会触发的事件有changerequest,sync/error
    • 客户端新创建的模型没有id,依旧可以使用fetch拉取数据
  • modelInstance.destroy()
    • 第一个参数,wait选项,后台无响应或响应出错,model不会改变
    • 会触发destoryrequestsync事件。

应用

  1. Table或者FormbaseCollection中,设置parse函数。(可以把Collection想想成Models)
  2. 在具体的Collection中设置地址
  3. 在事件中,父视图监听子视图的模型,一旦发生sync,就从新请求一次数据。
// 视图监听其他视图的模型上数据改变
this.listenTo(childModel.model,'change',function(){});
// 视图监听自己模型上数据变化
this.listenTo(this.model,'change',function(){});

你可能感兴趣的:(04Backbone系列)