Я пытаюсь отфильтровать результат моего hasMany-Array async-get с filterBy и условие isRoot = true. Свойство isRoot - это вычисленное свойство, и кажется, что функция filterBy от ember не ждет, пока обетование решится. Вот мой код:Ember.JS - Невозможно фильтровать или фильтровать на основе вычисленных свойств
модель каталог
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;
});
Кто-то, кто знает решение для моей проблемы? Thx заранее!
UPDATE
Я сделал JSBIN с шоу моей текущей проблемы. Здесь ссылка JSBIN link to my example
Не можете ли вы просто сделать 'directories.filter (function (dir) {return dir === null})' (или извлечь dir === null part out) –
Если вы можете получить его на jsbin для нас играть - было бы легче разобраться в этом – Kalman
Привет, Бенджамин! Каталог - это только корневой каталог, если родительский каталог (каталог отношений «в каталоге-модели»), к которому он присоединен, равен NULL. Ваш пример - хорошая идея, но чтобы получить ожидаемый результат, я должен был бы сделать что-то вроде этого: 'directories.filter (function (dir) {return dir.get ('directory'). Then (function (directory) {return directory = = null});}); 'все еще оставляет меня с обещанием – mnie