ember.jsember-dataundefinedbelongs-torsvp.js

Ember BelongsTo within two models issue


Good day all,

Models:

I create structure for full-calendar in lessons controller

    events: function(){
       var lessons = this.get('model');
       var events = [];
       lessons.map(function(lesson){
           events.push({
               'title' : lesson.get('title'),
               'start' : lesson.get('start'),
               'end'   : lesson.get('end'),
               'color' : lesson.get('guild.color'), // return undefined
               'lesson': lesson
           });
       });

       return events;
   }.property('model')

or

events: function(){
       var lessons = this.get('model');
       var events = [];
       lessons.map(function(lesson){
           events.push({
               'title' : lesson.get('title'),
               'start' : lesson.get('start'),
               'end'   : lesson.get('end'),
               'color' : lesson.get('color'), // return undefined
               'lesson': lesson
           });
       });

       return events;
   }.property('model')

But have trouble for resolve lesson.guild.color relation I try add new property in model that compute color from guild, like this:

title: DS.attr('string'),
guild: DS.belongsTo('guild'),
color: function(){ 
   return this.get('guild.color');
}.property('guild.color')

thx, engma. But this work only for Handlebars, because it is resolve all promises.

If any know how to get properly color from guild entity, would be great..

Heh, i try this:

events: function(){
    var lessons = this.get('model');
    var events = [];
    var guildPromisses = lessons.getEach('guild');
    return Ember.RSVP.all(guildPromisses).then(function(guilds){
        return lessons.map(function(lesson){
            events.push({
                'title': lesson.get('title'),
                'start': lesson.get('start'),
                'end': lesson.get('end'),
                'color': lesson.get('guild.color')
            });
        });
    }).then(function(result){
        return events;
    });

}.property('model'),

This work, but i think it return Promise :)


Solution

  • events: function(){
        var _self = this;
        var lessons = _self.get('model');
        var guildPromisses = lessons.getEach('guild');
        var result =  Ember.RSVP.all(guildPromisses).then(function(guilds){
            var events = [];
            lessons.map(function(lesson){
                events.push({
                    'title': lesson.get('title'),
                    'start': lesson.get('start'),
                    'end': lesson.get('end'),
                    'color': lesson.get('guild.color')
                });
            });
            _self.set('events', events);
        });
    }.property('model'),
    

    Thats all, thank for Engma, and this topic: How to return a promise composed of nested models in EmberJS with EmberData?