2013-11-27 16 views
16

İlgili veriler için isteği nasıl belirlersiniz? Örneğin, Person'umun bin Görev modellerine sahip olması durumunda aşağıdakileri yaparsam, RESTful düşüncede, hepsini alırdım.ember-data ilişkilerini nasıl belirleyebiliriz

var tasks = person.get('tasks'); 

Bu çok fazla veri olabilir. Bazı sorgu parametrelerini sahne arkasında çalışan istek üzerine nasıl zorlarım? İdeal olarak bunun sonuna ekli bir şeye benzeyen bir son noktaya. İşte

?&offset=3&limit=3

ben IndexController başarmak çalıştığım şey göstermek için bir fiddle olduğunu. "Yetişme yolunun", ember-data kullanarak paginated istekleri yapması hakkında hiçbir fikrim yok.

+2

Bunun için iyi bir çözüm buldunuz mu? – RyanJM

cevap

-2

Ember.js guides on using models'dan, find() numaralı çağrı ile birlikte bir sorgu gönderebilirsiniz. rehber itibaren

this.store.find('person', { name: "Peter" }).then(function(people) { 
    console.log("Found " + people.get('length') + " people named Peter."); 
}); 

:

Eğer Kor Verilere opak find() geçmek arama seçenekleri karması. Varsayılan olarak, bu seçenekler sunucunuza bir HTTP GET isteğinin gövdesi olarak gönderilir.

Bu özelliği kullanarak sunucunuzun sorgu yanıtlarını nasıl yorumlayacağını bilmesini gerektirir.

+0

Yanıt verdiğiniz için teşekkürler. evet, bunu okudum. Sorun benim ilişki uçurumlarımın yüklerimin 'bağlantılar 'bölümünde yer almasıdır. Eğer tüm "Görevler" i istemiş olsaydım, yukarıdaki yöntemi kullanırdım ama eğer belirli bir kişinin görevlerini sorgulamak istersem, uç noktam farklıdır, "insanlar/$ id/görevler" – David

+0

Bu tür bir yapıyla, "Person" bir görevlere sahip olmalıdır: hasMany ('task') 'ilişki, o zaman 'person.get (' task ')' kullanarak belirli bir kişinin görevlerine erişebilirsiniz? – CraigTeegarden

+0

Bunu deneyebilirim ancak görevler uygulamanızda polimorfiktir. İnsanlara veya şirketlere ait olabilirler. – David

10

bu soruyu ilk istendi zaman olmasaydı, ama en azından RESTAdapter ve JSONAPIAdapter için, bu yeteneğine görünüyor ember-data-has-many-query denilen bir eklenti şimdi var. Henüz birinci sınıf bir kavram olarak sayfalandırmayı desteklemeyen sanal verilerden dolayı biraz tuhaflık var gibi görünüyor. Bu sizi huzursuz yaparsa, her zaman store.query olur, ancak bu API'nizinuç noktasında bir person_id filtre parametresini desteklemesini gerektirir. hasMany ilişkiyi getirirken Destek sorgu parametreleri

  • json-api issue #509:

    İlgili:

    (o dahil bu soru gibi görünmüyor underspecified değildir JSON API'sı, ancak tartışmaya uygundur.)

  • 5

    Bugün hala ember'de sayfalandırma işlemek için varsayılan yolu.

    İlk önce, findAll isteğinin sayfa numarasına bakmamız gerekiyor.

    Bu

    .query({page:3}) gibi bir şeyle yapılır, ancak açan bazı Problemlerine edilebilir:

    1. Bu klasik sayfalandırmada iyi bir çözümdür, ama bir sonsuz-kaydırma hala manuel sonuçları birleştirmek gerekir.
    2. Sonuçlar önbelleğe alınmaz, bu nedenle sayfalara ayrılmış bir listede ileri ve geri gitmek çok fazla sorguya neden olur. Bazen bu liste düzenlenebilir, ancak çoğu zaman değil, bu gereklidir.

    İkinci sorun için mağazaya kanca atan ve sorgu sonuçlarını önbelleğe almanıza olanak tanıyan biraz addon called ember-query-cache yapıyorum. Çok kısa bir demo here kullanılabilir.

    Şimdi dürüstçe size kor-data kendisinden daha iyi destek var kadar üst seviyeye .query kullanmak öneriyoruz ilişkisi hakkında konuşmak ise:

    store.query('task', { person: get(person, 'id'), page: 3 } 
    

    bu konuda kötü bir şey yok. Sonuçlarınızı alırsınız ve ilişkiyi diğer yönde alırsınız. Önbelleğe alma gereksiniminiz olmadığından, herhangi bir hack verisi olmadan çalışır ve önbelleğe almanız gerekiyorsa benim addon'ımda yaptığım çok az hacklemeyi gerektirir.

    Hala sanal veriyi tamamen JSONAPI haline getirmeyi umuyoruz ve bu durum sayfalama gerektiriyor. Bence bir API perspektifi oluşturmak en iyi şey, ilişkiden dönen ManyArray'daki bir sonraki ve bir önceki sayfayı sorma yeteneğine sahip olmaktı. Bir sonraki ve bir önceki bağlantının verildiği JSONAPI ile birlikte olurdu. Ancak, şu anda, birçok projede başarılı bir şekilde kullandığım üst düzey .query üzerinde büyük bir iyileştirme yapmadan, sanal verileri derinlemesine kesmek zorunda kalacaksınız.

    İlgili konular