我正在使用下面显示的Backbone模型
var myModel = Backbone.Model.extend({
defaults:{
name: 'user',
address: {
city: '',
state: '',
area: {
code: '',
street: ''
//More properties
}
}
});
因此,我可以使用
访问嵌套的街道属性 model.get('address').area.street
现在我有一个像
这样的字符串 properties = 'area.street'
如何使用它来访问嵌套的街道属性?
我们可以直接访问嵌套属性吗?
答案 0 :(得分:0)
您可以使用Underscore的flatten
方法展平嵌套,这会将对象放在一个项目数组中并将street
放在该对象的顶层:
var flatAddress = _.flatten(model.get('address'))
如果您正在'area.street'
工作,那将无济于事。给定一个表示点表示法的字符串,字符串可能需要以JS对象可以消化的方式分解。考虑像
var array = properties.split('.');
var fromAddress = model.get('address');
for (var i = 0; i < array.length; i++ ) {
fromAddress = fromAddress[array[i]];
}
或者如果Array.reduce
可用/可取:
var property = properties.split('.').reduce(function(prev,curr) {
return prev[curr];
}, model.get('address'));
要么在模型上作为属性来推动重用,也值得。
答案 1 :(得分:0)
看看this question - 答案显示了如何在backbone.model上使用构造函数,然后执行此操作:
constructor(input: IListItem) {
super();
for (var key in input) {
if (key) {
//this.set(key, input[key]);
this[key] = input[key];
}
}
}
使用this [key] = input [key]方法创建Backbone模型将允许您编写如下代码:
model.get('address').get('area').get('street')
如果您使用ES5语法(如答案中所述) - 您甚至可以编写如下代码:
model.Address.Area.Street
此外,您可能会发现this blog帖子有用。