2016-03-30 14 views
0

Bir diziden bir öğe seçmek için çok yararlı olan bir {{findby}} yardımcı oluşturdum, ancak bir sorunla karşılaştım. Yardımcı, bir promiseArray olan bir dizide findBy()'u aramaktan hoşlanmaz.EmberJS: Bir sözden veri döndürebilen bir yardımcıya nasıl yardımcı olunur

Yani yardımcı bunun için düzenleme: tabii

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

fikri varlık, bir geçti dizisi PromiseArray olmak olur, findBy() çağırmak denemeden önce then() kullanın.

Sorun şu ki, bu durumda bir şey döndüremiyor gibi görünmüyor .. then()'un içinden dönmek yardımcı işlevini gerçekten kapatıyor gibi görünmüyor, bu nedenle yardımcı tanımsız olarak geri dönüyor.

i yapmaya çalışırsanız:

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

sonra sadece söz kendisi yardımcı döndü alır. https://ember-twiddle.com/c82fb0e11641703f118e867b45403654?numColumns=2&openFiles=controllers.application.js%2Chelpers.findby.js

soru yardımcıları için genel bir gibi görünüyor: bir yardımcı bir vaadi gelen/o() işlevini verilerini döndürmek için bir yol var mı Burada

Ben çalıştılar şeyin bir Twiddle nedir? Yapmak istediğim şey bir yardımcıyla mümkün mü acaba?

+2

[ember-promise-helpers] 'a göz atmalısınız (https://github.com/fivetanley/ember-promise-helpers) – nem035

+0

@nem ok Teşekkürler, yararlı olabilir gibi görünüyor! – Grapho

cevap

0

Bence sadece recompute'u aramalısın!

Yani böyle bir şey:

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

denedin Ne mümkün değildir. Geri dönüş .then(() => <here>); yazarsanız, ana işlevi değil, ok işlevini döndürürsünüz. Ebeveyn fonksiyonu uzun bir süre önce ve geri döndü, söz beklemek bile istemez.

Ancak, her zaman .recompute numaralı telefonu arayabilir, yeni hesaplayabilir ve bu sizin için çalışacaktır.

+0

iyi bir fikir gibi görünüyor .. sözde yardımcı addon'a benzeyen bir kod gördüm .. ama .. normal helper fonksiyonunda 'recompute 'diyebilir miyim? veya sınıf temelli bir yardımcı olmanız mı gerekiyor? – Grapho

+0

% 100 emin değilim, ama sanırım veri veriyorum yardımcı bir örnekte işlevinizi sarar. Yani işe yaramalı. Ama dene. – Lux

İlgili konular