# Model
Model 是 Ledap 的一个基类,是 BaseObject 的子类,用于处理数据,如表单验证等。
# 获取实例
import * as Ledap from 'ledap';
const model = new Ledap.Model();
# 实例方法
# model.load(data)
该方法是 Ledap 中比较重要的一个方法,承担了 Model 类的核心职责,加载数据,并提供对数据的描述,如 label、hint 等。
- 参数:
- {Object} data
- 详细:实例加载 data,data 为 key/value 结构,当 value 为简单类型的时候,直接获取该值,当 value 为 Object 时,我们叫做为有配置的 value。需要注意的是,当由于 Model 是 BaseObject 的子类,属性的可枚举性与 base.load 有相同的处理方式。
# 有配置的 value
| 属性 | 类型 | 说明 |
|---|---|---|
| label | String | form-item 组件 label 的默认值 |
| hint | String | base-input 组件 placeholder 的默认值 |
| value | String | 该属性会作为 model 对应的 key 的值,也是 form-item 的默认值 |
| rules | Array<Object> | rules |
- 示例:
const model = new Ledap.Model();
model.load({
age: 18,
name: {
label: '姓名',
hint: '请输入姓名',
value: '张三', // 此值作为 model.name 的值
rules: [{
type: 'string',
options: {
max: 5,
message: '姓名必须是一条字符串。',
skipOnEmpty: 1,
tooLong: '姓名只能包含至多5个字符。'
}
}]
}
});
model.age; // 18
model.name: // 张三
# model.rules()
- 返回值:{Object}
- 详细:返回 model 各个字段的 rules
- 示例:
models.rules();
// {
// name: {
// string: {
// max: 5,
// message: '姓名必须是一条字符串。',
// skipOnEmpty: 1,
// tooLong: '姓名只能包含至多5个字符。'
// }
// }
// }
# model.attributeLabels()
- 返回值:{Object}
- 详细:返回 model 各个字段的 label
- 示例:
model.attributeLabels(); // { name: '姓名' }
# model.getAttributeLabel(key)
- 参数:
- {String} key
- 返回值:{String}
- 详细:返回 model 中 key 属性的 label
- 示例:
model.getAttributeLabel('name'); // 姓名
# model.attributeHints()
- 返回值:{Object}
- 详细:返回 model 各个字段的 hint
- 示例:
model.attributeLabels(); // { name: '请输入姓名' }
# model.getAttributeHint(key)
- 参数:
- {String} key
- 返回值:{String}
- 详细:返回 model 中 key 属性的 hint
- 示例:
model.getAttributeHint('name'); // 请输入姓名
# model.validate([attributes, clearErrors])
- 参数:
- {String | Array<String>}
- {boolean} clearErrors 默认值为 true
- 返回值:{boolean}
- 详细:清空 model 指定属性的错误信息,并重新验证其属性的 value 是否符合对应的 rules,当未指定 attributes 时,则验证所有属性。
- 示例:
model.validate('name'); // true
model.name = 'zhangsan';
model.validate('name'); // false 因为不符合长度规则
model.validate(); // false
# model.addValidator(attribute, ruleType[, option])
- 参数:
- {String} attribute
- {String | Function} ruleType
- {Object} option
- 详细:给指定 attribute 添加一个类型为 ruleType 的验证规则,选项为 option,或者直接指定一个函数验证。
- 示例:
model.addValidator('age', function() {
if (!model.age) return false;
return true;
});
# model.hasErrors([attribute])
- 参数:
- {String} attribute
- 返回值:{boolean}
- 详细:返回指定 attribute 对应的值在对应的 rules 下是否有错误,如果没有指定 attribute,则返回所有属性是否有错误。需要先调用 model.validate 方法。
# model.getErrors([attribute])
- 参数:
- {String} attribute
- 返回值:{Array | Object} 错误数组格式是因为 rules 是数组格式
- 详细:返回指定 attribute 的错误,当没有指定 attribute 时,则返回全部属性的错误信息。
- 示例:
model.getErrors('name');
// ['姓名只能包含至多5个字符。']
model.getErrors();
// {
// name: ['姓名只能包含至多5个字符。']
// }
# model.getFirstError([attribute])
- 参数:
- {String} attribute
- 返回值:{String}
- 详细:返回指定 attribute 的第一个错误,当没有指定 attribute 时,则按照对象的枚举顺序返回 model.getErrors() 的第一个属性的第一个错误。
- 示例:
model.getFirstError('name'); // '姓名只能包含至多5个字符。'
model.getFirstError(); // '姓名只能包含至多5个字符。'
# model.addError(attribute[, error])
- 参数:
- {String} attribute
- {String} error
- 详细:手动给指定的 attribute 添加一个错误信息。
- 示例:
model.addError('age', '年龄太大了');
model.getErrors('age'); // ['年龄太大了']
model.addError('name', '名字太长了');
model.getErrors('name'); // ['姓名只能包含至多5个字符。', '名字太长了']
# model.clearErrors([attribute])
- 参数:
- {String | Array<String>}
- 详细:清空指定 attribute 的错误信息,如果没有指定 attribute,则清空所有属性的错误信息
# model.isRequired(attribute)
- 参数:
- {String} attribute
- 返回值:{boolean}
- 详细:返回指定属性 attribute 是否是必填项
# 静态属性
# Model.EVENT_BEFORELOAD
- 类型:String
- 详细:在调用 load 之前触发的事件名称
# Model.EVENT_LOAD
- 类型:String
- 详细:在调用 load 过程中触发的事件名称
# Model.EVENT_AFTERLOAD
- 类型:String
- 详细:在调用 load 之后触发的事件名称
# Model.EVENT_BEFORE_VALIDATE
- 类型:String
- 详细:在调用 validate 之前触发的事件名称
# Model.EVENT_AFTER_VALIDATE
- 类型:String
- 详细:在调用 validate 之后触发的事件名称
# 其他
由于 Model 是 BaseObject 的子类,Model 的实例也具有 BaseObject 实例的方法,如model.on、model.emit等,详见 BaseObject 实例方法。