2013-03-14 12 views
6

Sayfa yüklemesinde bir emberjs uygulamasının verilerini önyüklemenin en iyi yolu nedir. En büyük ihtimalle veriyi gizli bir div içindeki veri-nitelik veya veriden elde edeceğini biliyorum, fakat bu uygulamada emberjs uygulama yaşam döngüsü nereye gider?ember.js içinde önyükleme verileri

+0

Eğer "kullanıcı geri geliyor" açıklayabilir bölümü derinlemesine biraz daha? Yani -sadece yerel depolama veya çerezleri veya tarayıcıda başka bir şey ($ içeriğe) göstermek için $ .ajax şeyleri gerçekleşmeden önce kullanıyor musunuz? –

+0

"Kullanıcı geri geliyor" bir oturum olduğunu ima eder. Öyleyse, ember uygulamasının önyükleme yapmak için kullanacağı html'ye (yalnızca kullanıcıyla değil, diğer bilgilerle birlikte) html yerleştirilmiş bazı jsonlar olurdu. Anlamaya çalışıyorum, html'den verileri alıp kullanmak için sanal uygulama yaşam döngüsündeki en iyi yer. – spullen

cevap

3

Yükleyebileceğiniz birkaç farklı veri türü vardır. Dinamik veri için ((statik veriler için) DS.FixtureAdapter birlikte ember-data modeller kullanılarak veya DS.RESTAdapter edilmiştir

Bu armatürleri kullanılarak küçük bir örneğidir:. Benim (ufacık) uygulamalarda

App.Store = DS.Store.extend({ 
    revision: 11, 
    adapter: 'DS.FixtureAdapter' 
}); 

App.Page = DS.Model.extend({ 
    title: DS.attr('string') 
}); 

App.Page.FIXTURES = [{ 
    id: 1, 
    title: "Test Title #1" 
    }, { 
    id: 2, 
    title: "Random Title #2" 
    }]; 

Sadece değilim mağaza ve modelleri tanımladıktan sonra fikstür verilerini doğrudan yükler.Bu, basit bire bir ilişkilendirmeler için iyi çalışır (türlerin veya kategorilerin statik listelerini düşünün) .Açıksız tipte verileri kullanırken, yalnızca rotada model özniteliği olarak belirtilir, ve gerektiğinde yüklenir.Güncelleştirme

İlk verileri önceden yüklemek için (ör. Sayfa yüklendiğinde loggedin gibi ilk sayfa durum) Eğer DS.Store#load kullanabilirsiniz:

Store = DS.Store.create({ 
    revision: 11 
}); 

Page = DS.Model.extend({ 
    title: DS.attr('string') 
}); 

Store.load(Page, {id: 1, title: 'Wow Cool Title'}); 

Store.find(Page, 1).get('title') //=> 'Wow Cool Title' 
+1

RESTAdapter kullanıyorum. Almaya çalıştığım şey, her şeyi ilk başta oluşturduğumda, sayfada sahip olduğum verileri nasıl yükleyeceğim. Örneğin, güncel bir kullanıcım var, takip etmek istiyorum ve mevcut kullanıcıyı sayfa yüküne önyükleme yapmak istiyorum (kullanıcının sayfayı kapattığını ve daha sonra geri döneceğini söyleyin). – spullen

+0

Bence işe yarayacak. Store.load dizileri alıp almadığını biliyor musunuz? Değil varsayalım ki sadece gömülü veri üzerinde döngü yapabilir ve her biri için bir Mağaza yükü yapabilirim. – spullen

+2

Evet, "DS.Store.loadMany" ile bir seferde birden çok kayıt yükleyebilirsiniz ([burada] [https://github.com/emberjs/data/blob/master/packages/ember-data adresine bakın. /lib/system/store.js#L1616) ve birkaç test [burada] (https://github.com/emberjs/data/blob/master/packages/ember-data/tests/unit/store_test.js#L211). –