【问题标题】:Ember BelongsTo within two models issueEmber BelongsTo 内两个模型问题
【发布时间】:2016-04-02 18:07:06
【问题描述】:

大家好,

型号:

  • 课程

    title: DS.attr('string'),
    guild: DS.belongsTo('guild')
    
  • 公会

    title: DS.attr('string'),
    color: DS.attr('string')
    

我在课程控制器中为全日历创建结构

    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')

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')

但是在解决 course.guild.color 关系时遇到了麻烦 我尝试在模型中添加从公会计算颜色的新属性,如下所示:

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

谢谢,英格玛。 但这仅适用于 Handlebars,因为它解决了所有承诺。

如果有人知道如何从公会实体获得正确的颜色,那就太好了..

嘿,我试试这个:

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'),

这项工作,但我认为它会返回 Promise :)

【问题讨论】:

  • 很好的帮助,-1... 没有一个 cmets :)
  • 这个语法是什么 Ember.computed('guild', function()....).property('guild') ?我认为这是其中之一,但不是同时都有
  • 如果我认为正确的话,首先“公会”用于预加载计算,第二个是在“公会”更改之后。我还尝试了另一种变体,Ember.computed(function(){}) .property('guild'), function(){}.property('guild')
  • 公会中的问题之前未解决,并且包含承诺的数组未将其解析为变量。如果我是对的,那么 course.get('guild').get('color') 应该是 -> course.get('guild').then(function(guild){ return guild.get('color'); } )...在我将记录添加到列表之前应该解决构造返回承诺和承诺
  • 您是否尝试在控制器/组件中或仅在模型中添加该计算属性?来自 engma 的建议应该确实有效,它一直对我有用(有加载和尚未加载的关系)。您可以将控制器/组件发布到您想要访问该属性的位置吗?

标签: ember.js ember-data undefined belongs-to rsvp.js


【解决方案1】:
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'),

就是这样,感谢 Engma,以及这个话题:How to return a promise composed of nested models in EmberJS with EmberData?

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-09-22
    • 2013-01-18
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多