2014-03-27 62 views
0

我有一個應用程序,有很多層的關係。我有一個n輪比賽,每輪有n場比賽,每場比賽有n個席位,每個席位有1個入場。以下是json結構的示例:顯示數據的多級關係與sideloaded json和Ember的數據

{ 
    "tournament": { 
    "id":      1, 
    "title":     "March Madness!!!", 
    "rounds":     [1], 
    "active_round":   1 
    }, 
    "rounds": [ 
    { 
     "id":   1, 
     "tournament": 1, 
     "matchups": [1, 2] 
    }, 
    { 
     "id":   2, 
     "tournament": 1, 
     "matchups": [3] 
    } 
    ], 
    "matchups": [ 
    { "id": 1, "round": 1, "seats": [1, 2] }, 
    { "id": 2, "round": 1, "seats": [3, 4] }, 
    { "id": 3, "round": 2, "seats": [5, 6] } 
    ], 
    "seats": [ 
    { "id": 1, "matchup": 1, "entry": 1 }, 
    { "id": 2, "matchup": 1, "entry": 2 }, 
    { "id": 3, "matchup": 2, "entry": 3 }, 
    { "id": 4, "matchup": 2, "entry": 4 }, 
    { "id": 5, "matchup": 3, "entry": "" }, 
    { "id": 6, "matchup": 3, "entry": "" } 
    ], 
    "entries": [ 
    { 
     "id":    1, 
     "seats":    [1] 
    }, 
    { 
     "id":    2, 
     "seats":    [2] 
    }, 
    { 
     "id":    3, 
     "seats":    [3] 
    }, 
    { 
     "id":    4, 
     "seats":    [4] 
    } 
    ] 
} 

我無法獲取內容。這裏是我的router.js:

App.Router.map(function() { 
    this.resource('tournament', { path: "/" }); 
}); 

App.TournamentRoute = Ember.Route.extend({ 
    model: function() { 
     return new Ember.RSVP.Promise(function (resolve, reject) { 
     [..we just get the data return the json object above to setupController...] 
     }); 
    }, 

    setupController: function (controller, model) { 
     controller.set('model', model); 
     [i do a little data computation here prior to the renderTemplate function] 
    }, 

    renderTemplate: function() { 
     var controller = this.controllerFor('tournament'); 
     this.render('tournament'); 
    } 
}); 

我tournament.hbs模板看起來是這樣的:

<h1>{{tournament.title}}</h1> 
    {{#each round in rounds}} Round id: {{round.id}} <br/> 
     {{#each matchup in round.matchups}} matchup id: {{matchup.id}} 
      <div class="matchup"> 
       {{#each seat in matchup.seats}} 
        <div class="entry"> 
         {{seat.entry.id}} 
        </div> 
       {{/each}} 
      </div> 
     {{/each}} 
    {{/each}} 

而且我得到屏幕上的以下內容:

March Madness!!! 
Round id: 1 
matchup id: 
matchup id: 
Round id: 2 
matchup id: 

所以,一點點它的一部分工作。我已經在控制檯上做了一些工作,在比賽級別上,matchup對象實際上是預期的值「1」和「2」,而不是matchups [0]和matchups [1],這就是爲什麼沒有匹配級別旁邊的「id」屬性。我不確定使用約定在Ember數據中有多少「魔力」,並且找不到任何使用此層次結構的示例。由於

UPDATE:

我包括我的模型,以便他們現在,第一個響應者的建議。我看到了相同的結果。

App.Tournament = DS.Model.extend({ 
    title: DS.attr('string'), 
    active_round_index: DS.attr('number'), 
    rounds: DS.hasMany('App.Round', { embedded: 'always' }) 
}); 

App.Round = DS.Model.extend({ 
    tournament: DS.belongsTo('App.Tournament'), 
    matchups: DS.hasMany('App.Matchup', { embedded: 'always' }) 
}); 

App.Matchup = DS.Model.extend({ 
    round: DS.belongsTo('App.Round'), 
    seats: DS.hasMany('App.Seat', { embedded: 'always' }) 
}); 

App.Seat = DS.Model.extend({ 
    matchup: DS.belongsTo('App.Matchup'), 
    entries: DS.hasMany('App.Entry', { embedded: 'always' }) 
}); 

App.Entry = DS.Model.extend({ 
    title: DS.attr('string'), 
    seats: DS.hasMany('App.Seat') 
}); 

**另一個更新**

所以,事實證明,在Ember.RSVP.Promise的記錄使用將不會使用所有的灰燼數據,它需要的「神奇」 RESTAdapter來做這件事。我插入了RESTAdapter,現在情況變得更好了。

回答

0

我看不出您的模型是什麼樣子,但有一個問題可能是您的模型上hasMany關係定義沒有標記爲{嵌入:'always'}。這將告訴燼序列化器在序列化和提取時如何處理相關模型。

例如:

App.Round = DS.Model.extend({ 
    tournament: DS.belongsTo('tournament'), 
    matchups: DS.hasMany('matchup', { embedded: 'always' }) 
}); 
+0

我已經更新了原來的職位與我的模型,我加了你的建議,但它並沒有幫助,只是還沒有。 – panzhuli