javascript - Ember.JS - 无法根据计算属性进行筛选或筛选

标签 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;
    });

这里有人知道我的问题的解决方案吗?提前谢谢!

更新

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

最佳答案

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

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

工作 jsbin 示例 http://jsbin.com/kiwujohefa/1/edit?js,output .

有人知道计算属性和 ember.compulated.equal 之间的技术区别是什么吗?我认为在幕后它们的工作原理是相同的,只是 ember.compulated.equal 提供了特定的功能,例如这里相等吗?

关于javascript - Ember.JS - 无法根据计算属性进行筛选或筛选,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27711649/

相关文章:

javascript - 如何解决一个又一个的 promise ?

javascript - 如何将现有回调 API 转换为 Promise?

javascript - 未捕获的 TypeError EmberJS 初始值设定项

javascript - : Ember. js, Canjs, Angular.js 哪个JavaScript框架更适合新手?

javascript - 避免在 then 函数 JS 中嵌套 Promise

javascript - 为什么 Array.prototype.pop() 会影响其他数组?

javascript - 如何使用两个单选按钮显示隐藏两个文本框

javascript - 如何将数字数组映射到对象数组中的属性?

javascript - 我从 javascript 代码 : var context = document. getElementById ("gameCanvas").getContext ("2d"); 收到错误

javascript - Ember.js:引导的 jQuery 绑定(bind)不起作用