Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/457.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript Ember.JS-无法筛选或基于计算属性筛选_Javascript_Ember.js_Promise_Computed Properties - Fatal编程技术网

Javascript Ember.JS-无法筛选或基于计算属性筛选

Javascript Ember.JS-无法筛选或基于计算属性筛选,javascript,ember.js,promise,computed-properties,Javascript,Ember.js,Promise,Computed Properties,我正在尝试使用filterBy和条件“isRoot”==true筛选hasMany数组异步get的结果。“isRoot”属性是一个计算属性,而且ember的filterBy函数似乎不会等待承诺的解析。这是我的代码: 目录模型 App.Directory = DS.Model.extend(App.ModelEventHandler, { name: DS.attr('string', {defaultValue: ''}), users: DS.hasMany('user', {as

我正在尝试使用filterBy和条件“isRoot”==true筛选hasMany数组异步get的结果。“isRoot”属性是一个计算属性,而且ember的filterBy函数似乎不会等待承诺的解析。这是我的代码:

目录模型

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。这里的链接是我自己想出的解决方案。我正在使用Ember.computed.equal而不是计算属性。 这里是代码的一部分

isRoot: Ember.computed.equal('directory.content', null),
正在工作的jsbin示例


有人知道计算属性和ember.computed.equal之间的技术区别吗?我认为在引擎盖下,它们的工作原理是一样的,只是ember.computed.equal提供了一个特定的功能,例如,here equal?

你不能只做
目录。过滤器(函数(dir){return dir==null})
(或者提取dir==null部分)如果你能把它放在jsbin上让我们玩-它会让我们更容易弄明白它嗨本杰明!如果其附加到的父目录(目录模型中的关系“目录”)为空,则目录仅为根目录。您的示例很好,但要获得预期结果,我必须执行以下操作:
directories.filter(函数(dir){return dir.get('directory')。然后(函数(directory){return directory==null});})
with仍然给我留下了一个承诺,用jsbin更新了这个问题!谢谢你提前看一下。