Ember.JS — невозможно filterBy или фильтровать на основе вычисляемых свойств

Я пытаюсь отфильтровать результат моего асинхронного получения 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 на мой пример


person mnie    schedule 30.12.2014    source источник
comment
Разве вы не можете просто сделать directories.filter(function(dir){ return dir === null }) (или извлечь часть dir === null)   -  person Benjamin Gruenbaum    schedule 30.12.2014
comment
Если бы вы могли загрузить его на jsbin, чтобы мы могли с ним поиграть, было бы легче понять это.   -  person Kalman    schedule 30.12.2014
comment
Привет Бенджамин! Каталог является корневым каталогом только в том случае, если родительский каталог (каталог отношений в модели каталога), к которому он прикреплен, имеет значение null. Ваш пример - хорошая идея, но чтобы получить ожидаемый результат, мне пришлось бы сделать что-то вроде этого: directories.filter(function(dir){return dir.get('directory').then(function(directory){return directory == null});}); with все еще оставляет мне обещание   -  person mnie    schedule 30.12.2014
comment
Обновил вопрос с помощью jsbin! Заранее спасибо за просмотр.   -  person mnie    schedule 31.12.2014


Ответы (1)