Ember.JS - 无法根据计算属性进行过滤或过滤

时间:2014-12-30 19:52:31

标签: javascript ember.js promise computed-properties

我正在尝试使用filterBy和条件“isRoot”== true过滤我的hasMany-Array async-get的结果。 “isRoot”属性是一个计算属性,似乎ember的filterBy函数不等待promise解析。这是我的代码:

目录模型

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提前!

更新

我制作了一个JSBIN,显示了我当前的问题。这里是链接JSBIN link to my example

1 个答案:

答案 0 :(得分:2)

我自己想出了一个解决方案。我正在使用Ember.computed.equal而不是计算属性。 这是代码的一部分

isRoot: Ember.computed.equal('directory.content', null),

使用jsbin示例http://jsbin.com/kiwujohefa/1/edit?js,output

有人知道计算属性和ember.computed.equal之间的技术差异吗?我认为它们的工作方式与ember.computed.equal一样,只提供了一个特定的功能,例如:在这里等于?