Я пытаюсь отфильтровать результат моего асинхронного получения hasMany-Array с filterBy и условием «isRoot» == true. Свойство «isRoot» является вычисляемым свойством, и кажется, что функция filterBy Ember не ждет разрешения промиса. Вот мой код:
Модель для каталога
App.Directory = DS.Model.extend(App.ModelEventHandler, {
name: DS.attr('string', {defaultValue: ''}),
users: DS.hasMany('user', {async: true}),
isRootOfShare: DS.attr('boolean', {defaultValue: false}),
directories: DS.hasMany('directory', {async: true, inverse: 'directory'}),
directory: DS.belongsTo('directory', {async: true, inverse: 'directories'}),
shares: DS.hasMany('share', {async: true}),
files: DS.hasMany('file', {async: true}),
isRoot: function () {
var directoryPromise = this.get('directory');
return directoryPromise.then(function (directory) {
var isRoot = directory === null;
return isRoot;
}.bind(this));
}.property('directory')}
Модель для пользователя
App.User = DS.Model.extend(App.ModelEventHandler, {
// Attributes begin
email: DS.attr('string'),
isCurrentUser: DS.attr('boolean', {defaultValue: false}),
// Relationships
directories: DS.hasMany('directory', {async: true}),
shares: DS.hasMany('share', {async: true}) }
Оператор, который я использую для фильтрации каталогов:
user.get('directories').then(function (directories) {
//TODO: Fix isRoot
var filteredDirectories = directories.filterBy('isRoot', true);
return filteredDirectories;
});
Кто-нибудь здесь, кто знает решение моей проблемы? Спасибо заранее!
ОБНОВЛЕНИЕ
Я сделал JSBIN с отображением моей текущей проблемы. Вот ссылка ссылка JSBIN на мой пример
directories.filter(function(dir){ return dir === null })
(или извлечь часть dir === null) - person Benjamin Gruenbaum   schedule 30.12.2014directories.filter(function(dir){return dir.get('directory').then(function(directory){return directory == null});});
with все еще оставляет мне обещание - person mnie   schedule 30.12.2014