Javascript Ember.JS-无法筛选或基于计算属性筛选
我正在尝试使用filterBy和条件“isRoot”==true筛选hasMany数组异步get的结果。“isRoot”属性是一个计算属性,而且ember的filterBy函数似乎不会等待承诺的解析。这是我的代码: 目录模型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
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更新了这个问题!谢谢你提前看一下。