2012-09-17 190 views
1

我有一个嵌套的数据结构如下:Ember.js嵌套ArrayController和模型

Job:{ 
    JobId: 1, 
    NumberTrackr: 2, 
    Trackrs: [ 
       1 : { TaskTrackrID: a, 
         NumberSlots:1, 
         slots: [ 
          slot1: {uniqueId:foo, you: get, the:[point, by, now]} 
           ] 
        }, 
       2 : { TaskTrackrID: b, 
         NumberSlots:1, 
         slots: [ 
          slot1: {uniqueId:bar, you: get, the:[point, by, now]} 
           ] 
        } 
      ] 
} 

而我的应用程序使用此数据体系(计算特定Trackr的“儿童”富属性的总和),以及每个数据级别作为一个整体(例如,从所有插槽的内容计算统计数据,而不考虑其父'TaskTracker')。

Im新的Ember,但我想为每个对象级别创建一个模型(TaskTrackr,Slot等)。除了某些子模型阵列(使用arraycontroller?)之外,这个模型将包含上面显示的所有属性。所述子模型也将具有属性以及它们自己的子模型阵列。高级对象可以具有从其子对象计算出的计算属性,这一点很重要。作为一个整体访问每个级别并修改特定属性也很重要。

代码是什么样子,使我能够以树和层次的形式访问这些数据?

非常感谢你的帮助

回答

2

看看Ember Data。它支持这些类型的关系。

App.Job = DS.Model.extend({ 
    trackers: DS.hasMany('App.Tracker') 
}) 

App.Tracker = DS.Model.extend({ 
    job: DS.belongsTo('App.Job'); 
}) 

// ... and so on 

var job = App.Job.createRecord(); 
job.get('trackers').pushObject(App.Tracker.createRecord()); 

只是要注意。您提到使用ArrayController,您可能会在您的Ember应用程序中使用它。但是,在建模数据/关系时,不会使用任何控制器。你应该能够做到只使用上面粘贴的东西DS.Model

+0

感谢您的回答。我发现您的代码设置了层次结构,但您将如何访问所有的跟踪器? – user1483714

+0

对于一份工作:''job.get('trackers')''。对于世界上所有的追踪者:''App.store.findAll(App.Tracker)''。阅读Ember Data github页面,其中有很多信息。 – Ryan