我正在使用backbone.js开发应用程序,而且我有时会使用包含子对象的基于JSON的模型,如下所示:
{
"key1": "value1",
"key2": "value2",
"key3": {
"key1": "value1"
},
}
现在似乎该模型的方法"已经" (返回布尔值或不是键是模型的一部分)不适用于子对象。
例如,对于上面的数据,这将返回undefined
myModel.has("key3.key1")
知道怎么处理这个案子吗?
由于
答案 0 :(得分:0)
我建议,不要覆盖默认行为,而是可以使用与
类似的东西轻松构建此功能var buildDeepMap = function(baseKey, map, obj){
_.each(obj, function(value, objKey){
var key = baseKey === ''? objKey : baseKey+'.'+objKey;
if(typeof value === 'object'){
buildDeepMap(key, map, value)
}else{
map[key]=value;
}
})
return map;
}
var MyModel = Backbone.Model.extend({
constructor: function(){
Backbone.Model.apply(this, arguments);
this.buildDeepMap();
},
buildDeepMap: function(){
this.deepFlatIndex = buildDeepMap('', {}, this.toJSON());
},
deepHas: function(key){
return _.has(this.deepFlatIndex, key)
}
});
用法可以是这样的
var data = {
"key1": "value1",
"key2": "value2",
"key3": {
"key1": "value1"
}
}
var myDeepHasModel = new MyModel(data);
console.log(myDeepHasModel.deepHas('key1')); //true
console.log(myDeepHasModel.deepHas('key3.key1')); //true
console.log(myDeepHasModel.deepHas('key3.key2')); //false