自定义设置
Backbone.js - custom setters
想象一个简单的骨干模型,如
window.model= Backbone.Model.extend({
defaults:{
name: "",
date: new Date().valueOf()
}
})
我试图找到一种方法,始终使模型存储在小写的名称,无论输入提供。例如,
model.set({name: "AbCd"})
model.get("name") // prints "AbCd" = current behavior
model.get("name") // print "abcd" = required behavior
做这件事的最好方法是什么?以下是我能想到的:
- 覆盖"set"方法
- 使用"SantizedModel"来监听这个基本模型上的更改,并存储经过处理的输入。然后,所有视图代码都将传递给这个经过处理的模型。
我提到的特定的"to lower case"示例在技术上可能由视图在检索时更好地处理,但是想象一下另一种情况,例如,用户以英镑输入值,而我只想在数据库中以$s存储值。同样的模型也可能有不同的视图,我不想在它被使用的地方做一个"toLowerCase"。
想法吗?
UPDATE:可以使用插件:https://github.com/berzniz/backbone.getters.setters
你可以像这样重写set方法(将它添加到你的模型中):
set: function(key, value, options) {
// Normalize the key-value into an object
if (_.isObject(key) || key == null) {
attrs = key;
options = value;
} else {
attrs = {};
attrs[key] = value;
}
// Go over all the set attributes and make your changes
for (attr in attrs) {
if (attr == 'name') {
attrs['name'] = attrs['name'].toLowerCase();
}
}
return Backbone.Model.prototype.set.call(this, attrs, options);
}
这将是一个hack,因为这不是它的目的,但您总是可以使用验证器:
window.model= Backbone.Model.extend({
validate: function(attrs) {
if(attrs.name) {
attrs.name = attrs.name.toLowerCase()
}
return true;
}
})
在模型中设置值之前将调用validate函数(只要没有设置silent
选项),因此它给了您在真正设置数据之前更改数据的机会。
不是我自己吹嘘,而是我创建了一个带有"Computed"属性的Backbone模型来解决这个问题。换句话说
var bm = Backbone.Model.extend({
defaults: {
fullName: function(){return this.firstName + " " + this.lastName},
lowerCaseName: function(){
//Should probably belong in the view
return this.firstName.toLowerCase();
}
}
})
您还可以侦听计算属性的更改,并且基本上只是将其视为常规更改。
Bereznitskey提到的插件也是一个有效的方法。
相关文章:
- 如何设置自定义垂直滑块Jquery的动画
- 如何在ExtJs4应用程序上为视图、存储和模型设置自定义文件夹名称
- Alfresco JavaScript,当文件上传到网站时,设置自定义类型属性
- 如何使用传单为传单实时插件设置自定义图标
- 正在设置自定义属性名称
- 设置自定义覆盖和多边形的任意z索引顺序
- 在条件中的几个时间行中设置自定义css效果后,从Jquery时间选择器显示时间
- 从ngInit在AngularJS中全局设置自定义HTTP头
- 使用 jQuery 设置自定义属性和值
- 谷歌分析设置自定义维度值
- 如果未选中,则 js 复选框不设置自定义值
- 使用 JavaScript 设置自定义属性
- node_module 设置自定义版本
- 如何在只读输入字段上设置自定义有效性
- JQPLOT 根据标签名称为饼图设置自定义颜色
- 角度设置自定义标头始终包装在访问控制请求标头中
- 在 Ajax 调用中设置自定义内容类型响应标头
- 通用分析中用于设置自定义维度的操作顺序
- 如何设置自定义对象属性以在 Angular 类型提前中进行筛选
- 如何在 php 中设置自定义月份开始日期和结束日期