在ember中处理嵌入数据

时间:2014-05-03 22:49:58

标签: javascript ember.js

假设我有一个图形(树,无论如何),并且普通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中,我需要TreeNode和类型模型。没什么大不了的。但是,我需要为树图解析数据。但是当我访问数据时,它就像一串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模型。我不希望这样。我想要的是处理应用程序中的嵌入数据

1 个答案:

答案 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 : []
    }
  ]
};

  }
});