2014-11-17 4 views
0

Я потерян в обещаниях данных Ember и имеет более хорошие отношения. Вот что у меня есть:Ember: async hasMany issue issue

Tarifs и резервировании загружены оба (с успехом) при запуске приложения:

App.ApplicationRoute = Ember.Route.extend({ 
    model: function() { 
    return Em.RSVP.hash({ 
     tarifs: this.store.find('tarif'), 
     reservations: this.store.find('reservation') 
    }); 
    } 
}); 

Затем tarifs и reservations ограничены в spectacles:

App.SpectaclesRoute = Ember.Route.extend({ 
    isLoaded:false, 

    model: function() { 
     if(this.isLoaded) { 
      return this.store.all('spectacle'); 
     } 

     this.isLoaded = true; 
     return this.store.find('spectacle'); 
    } 
}); 

Spectacles возвращается сервером с массивом ID representations и массивом ID tarifs. Representations объекты возвращаются в том же ответе ниже. Tarifs уже в магазине, благодаря первому звонку.

Вот модель оправ:

App.Spectacle = DS.Model.extend({ 
    titre: DS.attr('string'), 
    sousTitre: DS.attr('string'), 
    visuelUrl: DS.attr('string'), 
    tarifs: DS.hasMany('tarif', { async: true }), 
    representations: DS.hasMany('representation', { async: true }) 
}); 

Проблема: от того, что я могу видеть (с помощью плагина уголек браузера), spectacles и tarifs не связаны между собой (в то время как spectacles и representations являются). Единственное различие, которое я могу найти, это то, что они загружаются в два отдельных вызова сервера, но это не должно быть проблемой, не так ли?

Я думал, что это может быть проблема асинхронного/обещания. Моя потребность в представлении, чтобы получить тариф первого зрелища. Короче: myRepresentation.spectacle.tarifs [0]. Я пробовал различные вещи, как:

representation.get('spectacle.tarifs').then(function(tarifs) { 
    var tarif = tarifs.get('firstObject'); 
    console.log(tarif); 
} 

Ничто не работает: tarif всегда нуль. Кажется, что все записи загружены, но связь между spectacle и tarifs - нет.

Я что-то не так?

ответ

0

ОК, забудь об этом, проблема была в tarif модели:

App.Tarif = DS.Model.extend({ 
    nom: DS.attr('string'), 
    montant: DS.attr('number'), 
    spectacle: DS.belongsTo('spectacle', { async: true }) 
}); 

«belongsTo» отношение является ошибкой, поскольку tarif может быть связан со многими spectacles. Я просто удалил эту строку, и теперь все в порядке.