2015-12-24 16 views
7

Görevim, bir Ember 2 uygulaması için bir menü bileşeni geliştirmek. Bu, görsel sunumları kullanıcının rotadan geçerken değiştiği karmaşık bir bileşen olacak. Örneğin, "/ index" yolunda iken belirli menüyü ve tüm öğelerini devre dışı bırakmalı ancak "/ details" vb.Güzergah değişikliği konusunda bildirimde bulunacak öğe EmberJS 2

Bu yüzden, bir tekton modelinden geçen bir bileşeni (şu anda bir Hizmette depolanan, btw, tüm dünyadaki tekil modellerini Ember'de depolamak için doğru bir yer mi?) Aldım. İşleri iyi görüntüler, ancak geçerli rotaya uymaz ve kullanıcı uygulamadan geçerken rota değişikliklerini yakalamaz. Bunu nasıl başarabilirim?

O özetliyor:

  1. bileşen kullanıcı "/" linkini sayfasını yer imlerine ve onu ziyaret örneğin, onun başlangıç ​​durumunu görüntülemek için muktedir bir şekilde şimdiki rotayı almak gerekiyor.
  2. Bileşen, rota değişikliklerini bir şekilde ele almak zorunda.
  3. Bir Hizmet, bir tekil modelini (sunucudan getirilmiş olabilecek) tutmak için iyi bir yerdir.

Yukarıdaki üçü nasıl ele alacağınıza dair düşüncelerinizi iletir misiniz?

ÇÖZÜLDÜ: Tamam, işte burada, @ Bek önerileri sayesinde yapılır nasıl:

import Ember from "ember"; 

export default Ember.Component.extend({ 
    router: Ember.inject.service("-routing"), 

    didInsertElement: function() { 
     let r = this.get("router"); 
     console.log("Initial route", r.get("currentRouteName")); 

     r.addObserver("currentRouteName", this, "currentRouteNameChanged"); 
    }, 

    "currentRouteNameChanged": function(router, propertyName) { 
      console.log(router.get("currentRouteName")); 
    } 
}); 

FAZLA SORU :) - I (it a dize yapmak) tırnak currentRouteNameChanged işlev adı çevreleyen zorunda aksi çağrılmadı. Burada çok basit ve açık bir şeyi özlüyorum.

-routing - @Bek'in korkak servis adı olan bir başka konu ise, kendimi nasıl anlayabileceğime dair herhangi bir ipucu, bilgiye bakabileceğim enjekte edilebilir şeylerin bir listesi var mı? Henüz kabul ettiğim Ember belgelerinde değil, kaynak kodunda bunu kontrol etmek için var mı? Genel olarak -routing adı ne kadar kararlı, *routing veya son sürümde bir şey olur mu? Eğer bileşen router: Ember.inject.service('-routing') için enjekte ve currentRouteName değişiklikleri gözlemlemek, ancak şu anda özel bir hizmettir böylece (2.2 altında en az) router hizmet olarak kullanılabilir kor 2.x en son sürümlerinde :

+0

Eğer 'onRouteChange yapabilirsiniz değildir bu yüzden küresel mantık/nesneleri paylaşmak için yapılan istisnalar ve hizmetler olabilir:

3'e Anser Ember.observer ('yönlendirici. currentRouteName ', function() {console.log (' route changed ')}) 'değişiklikleri gözlemlemek ya da geçerli rota adını almak için şablondaki' router.currentRouteName' öğesine doğrudan erişmek için – Bek

+0

'-routing' tek yolla belgelenmiyor Böyle şeyler ember.js kaynak kodundan geçiyor: P – Bek

+0

'r.addObserver ...' 'currentRouteNameChanged '' olarak değiştirin ve daha sonra işlev bildirimlerinde tırnak kullanmadan kullanabilirsiniz. – rafamds

cevap

5

Cevap 1 ve 2 Bu nedenle (routing olarak yeniden adlandırılabilir) değişebileceği için dikkatli kullanılmalıdır, ayrıca ileride ember parçası olacak yönlendirilebilir bileşenler öneren rfc https://github.com/emberjs/rfcs/pull/38 vardır. Genellikle Hizmetler vatansız, ancak bunun kötü bir fikir

+0

'yönlendirici' enjekte görünmüyor, ben' 'didInsertElement'' içinde this.get ('yönlendirici')' giriş yapmaya çalışırken undefined' alıyorum. Ember sürümü burada 2.2.0-beta.1'dir. Bu gibi enjekte: yönlendirici: Ember.inject.service() ' – Barbadoss

+0

yönlendirici ile deneyebilirsiniz: Ember.inject.service ('- yönlendirme') ' – Bek

+0

Evet, bir şeyden geçiyorum. Ona bakmak ve daha fazla oynamak. Yakında 1 ve 2 çözdüğü gibi bir güncelleme ile geri döneceğim. Teşekkürler @Bek! – Barbadoss

İlgili konular