假设我有一个图形(树,无论如何),并且普通JS中的结构如下:
var trees = [{
name : 'my tree',
nodes : [
{
id : 0,
name : 'node 0',
type : 'fruit',
connectedTo : [1,2]
},{
id : 1,
name : 'node 1',
type : 'fruit',
connectedTo : [3,4]
},{
id : 2,
name : 'node 2',
type : 'fruit',
connectedTo : []
},{
id : 3,
name : 'node 3',
type : 'non-fruit',
connectedTo : []
},{
id : 4,
name : 'node 4',
type : 'non-fruit',
connectedTo : []
}
]
}]
现在在Ember中,我需要Tree
,Node
和类型模型。没什么大不了的。但是,我需要为树图解析数据。但是当我访问数据时,它就像一串get()
和then()
调用(关系在模型之间是异步的)。
this.get('nodes').then(function(nodes){
nodes.forEach(function(node){
node.get('type').then(function(type){
console.log(type.get('type')) // OMG
});
})
});
我希望以点符号方式访问它们,例如tree.nodes[1].type
。在恩伯有可能吗?我已经阅读了几篇关于嵌入式数据的帖子,他们所做的只是将外部数据规范化为Ember模型。我不希望这样。我想要的是处理应用程序中的嵌入数据。
答案 0 :(得分:1)
您可以在Ember中使用plainJS对象,而无需使用此example中的Ember数据。
<script type="text/x-handlebars" data-template-name="index">
<ul>
{{model.name}}
{{#each item in model.nodes}}
<li>{{item.id}}</li>
{{#each connectedTo in item.connectedTo}}
{{connectedTo}}
{{/each}}
{{/each}}
</ul>
</script>
有一次,您将模型数据设置为控制器内容,您可以将内容作为普通的ember对象进行操作。
App.IndexRoute = Ember.Route.extend({
actions: {
changeValues: function(){
this.controller.set('content.name', 'changed');
this.controller.set('content.nodes.firstObject.id', 7);
}
},
model: function() {
return {
name : 'my tree',
nodes : [
{
id : 0,
name : 'node 0',
type : 'fruit',
connectedTo : [1,2]
},{
id : 1,
name : 'node 1',
type : 'fruit',
connectedTo : [3,4]
},{
id : 2,
name : 'node 2',
type : 'fruit',
connectedTo : []
},{
id : 3,
name : 'node 3',
type : 'non-fruit',
connectedTo : []
},{
id : 4,
name : 'node 4',
type : 'non-fruit',
connectedTo : []
}
]
};
}
});