2016-03-30 5 views
0

{{findby}}ヘルパーを作成しました。これは、配列から項目を取り出すのに便利ですが、問題が発生しました。ヘルパーは、promiseArray配列のfindBy()を呼び出すのは好きではありません。EmberJS:約束からデータを返すことができるヘルパーを作る方法

だから、ヘルパーは、これを行うように変更されました:

export function findby([array, key, value]) { 
    let isPromiseArray = Ember.typeOf(array.then) === 'function'; 
    if (isPromiseArray) { 
    array.then((arr) => { 
     return arr.findBy(key, value) || null; 
    }); 
    } else { 
    return array.findBy(key, value) || null; 
    } 
} 

export default Ember.Helper.helper(findby); 

もちろんのアイデアビーイング渡される配列はPromiseArrayであることを起こる場合は、findBy()を呼び出そうとする前にthen()を使用しています。

この場合、何も返されないようですが、then()の内部から戻ってきても、ヘルパー関数が実際には閉じられていないように見えます。

私がしようとした場合:

return array.then((arr) => { 
    return arr.findBy(key, value) || null; 
}); 

そしてちょうど約束自体はヘルパーから返されます。ここで

は、私がしようとしているものの回転因子である:https://ember-twiddle.com/c82fb0e11641703f118e867b45403654?numColumns=2&openFiles=controllers.application.js%2Chelpers.findby.js

質問はヘルパーのための一般的なものであるように思わ:ヘルパーでの約束/そして、()関数からデータを返す方法はありますか?私がやりたいことがヘルパーでも可能なのだろうか?

+2

[ember-promise-helpers](https://github.com/fivetanley/ember-promise-helpers) – nem035

+0

@nem okありがとうございます。それは役に立つと思われます。 – Grapho

答えて

0

recomputeに電話する必要があります。

したがって、このような何か:

function findBy([array, key, value]) { 
    let content = Ember.get(array, 'content'); 

    if(!content) { 
     array.then(() => this.recompute()); 
     return null; 
    } 

    return content.findBy(key, value) || null; 
} 

あなたがしようとした何をすることはできません。返品.then(() => <here>);を書くと、親機能ではなく矢印機能が返されます。親関数はずっと前に返されました。そして、それは約束を待つことさえありません。

いつでも.recomputeに電話して再計算してください。これはあなたのために機能します。

+0

良いアイデアのように見えます。私はpromise-helper addonを見ているのと似たコードを見ましたが、通常のヘルパー関数で 'recompute'を呼び出せますか?それとも、クラスベースのヘルパーである必要がありますか? – Grapho

+0

私は100%確信していませんが、私はemberデータがヘルパーインスタンスであなたの関数をラップすると思います。そうすればうまくいくはずです。しかしそれを試してみてください。 – Lux

関連する問題