2014-10-25 2 views
5

У меня есть несколько моделей, установленных с асинхронными отношениями, например:Эмбер-данные вычисляются свойства на отношениях асинхронных

User = DS.Model({ 
    postsApproved: DS.hasMany('post', {async: true, inverse: 'approved'}) 
}) 

Post = DS.Model({ 
    approver: DS.belongsTo('user', {async: true, inverse: 'postsApproved'}) 
}) 

В контроллере, у меня есть собственность на посте, isApproved, который просто проверяет, если approver установлен. Я ожидаю, что это должно работать:

isApproved: function() { 
    return !Ember.isNone(this.get('approver')); 
} 

Но что всегда возвращает истину, и если я проверить данные, которые я вижу, что это происходит потому, что this.get('approver') возвращает обещание. Это работает:

isApproved: function() { 
    return !Ember.isNone(this.get('approver.content')); 
} 

Но использование content мне кажется, что возиться с внутренностями немного слишком много. Правильно ли это, или я что-то упускаю?

ответ

0

Вы правы, тестирование на this.get('approver.content') неверно, так как элемент может иметь ассоциированный approver, но он еще не загружен.

Попытки загрузить соответствующую модель на маршруте:

// route.js 
model: function(params) { 
    return this.store.find('post', params.post_id).then(function(post) { 
    return Ember.RSVP.hash({ 
     post: post, 
     approver: post.get('approver') 
    }); 
    }); 
}, 

setupController: function(controller, model) { 
    controller.set('model', model.post); 
    controller.set('approver', model.approver); 
}, 

// controller.js 
isApproved: function() { 
    return !Ember.isNone(this.get('approver')); 
}.property('approver') 
+0

Спасибо за совет, но это не похоже, чтобы остановить уголек возвращения обещания, а не значение, даже если обещание выполнено. Проверяя это, я вижу, что, когда выполняется 'isApproved', обещание выполняется, но' this.get ('approver') 'возвращает обещание, которое имеет' {content: null, isFulfilled: true} ', но которое само не является "null". – aquavitae

+0

попробуйте добавить 'approver: null' в определение контроллера (или, возможно, другое имя, чтобы отличать от асинхронного утверждения на модели) – Asgaroth

Смежные вопросы