2

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

私の問題の解決策を知っている人はいますか? 事前にt​​hx!

アップデート

現在の問題を示す JSBIN を作成しました。ここに私の例へのリンクJSBINリンクがあります

4

1 に答える 1

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 が特定の機能を提供するだけで、内部的には同じように機能すると思いました。

于 2014-12-31T13:25:29.067 に答える