2015-10-25 30 views
5

Ember-cli 1.13.8 kullanıyorum ve mantığımın çoğunu idare eden bir hizmetim var. Şu anda, bazı şeylerin doğru mu yanlış mı olduğunu dinleyen ve sonra buna göre bir rota değişikliği yapabilen bir fonksiyona sahibim. Her rotada olmasını istediğimden bu işlevi her rotadan aramak zorunda kalmamayı tercih ederim. Amacı, oyuncunun kazanıp kazanmadığını ve oyundaki her etkileşimin bunu yapıp yapmadığını belirlemektir. Benim oyun hizmetininEmber'de bir servisin içinde geçiş geçişi yapmak mümkün mü?

İçinde: this Ember gibi bir rota beklediği olmadığından Tabii

init() { 
    ... 
    if(true) { 
    console.log("you've won!"); 
    this.transitionTo("congratulations"); 
    } 
}, 

, bu başarısız olur. Bunun yerine her yöntemin içinden bu yöntemi çağıracağımı biliyorum ama bunu yapmanın daha iyi bir yolu olup olmadığını merak ediyorum.

Teşekkür

Düzenleme

Şimdiye kadar Uygulaması'nda aktarmayı ve ardından Router uzatmak için çalışıyor denedim. Bu olsa da kötü bir fikir gibi görünüyor.

cevap

23

Sen (özel API olan) yönlendirme hizmetini kullanabilirsiniz: Ember 2.15 itibariyle

routing: Ember.inject.service('-routing'), 

init() { 
    ... 
    if(true) { 
    console.log("you've won!"); 
    this.get("routing").transitionTo("congratulations"); 
    } 
}, 
+0

Vay, tamam, bunu denemek gerekecek. Bundan habersizdim. – user3162553

+0

Çalışıyor! Tam olarak ihtiyacım olan şey. – user3162553

+0

Bu çalışma, 2.ber'de mi çalışıyor? Sadece Ember 2.4.0'da yönlendirme tanımlanmamış olduğunu söylüyor. – mikeLspohn

9

, tam olarak bu kullanım şeklini bir kamu router hizmeti yoktur. Ember sınıfınıza router: Ember.inject.service(), ekleyin ve this.get('router').transitionTo(...);'u arayın, kolay!


Genellikle bu kötü bir fikir olduğunu, ancak bazı durumlarda 100 yerlerde (kişisel deneyim) rota eylemleri geçerek daha kolay.

her yerden bunu yapmak için daha iyi bir yol konteyner üzerinde yönlendirici yukarı bakmaktır:

Ember.getOwner(this).lookup('router:main').transitionTo(...); 

this bazı konteyner bileşenleri, hizmetler ve Kor Veri modellerini içerir Kor nesnesi, tahsis edilmelidir.

Ayrıca, eğer bu çok çağrılacaksa, yönlendiriciyi bir özellik olarak saklamak isteyeceğinizi de unutmayın. Sen init kanca yapabilirsiniz:

init() { 
    this._super(...arguments); 
    this.set('router', Ember.getOwner(this).lookup('router:main')); 
} 
... 
this.get('router').transitionTo(...); 

Ember.getOwner(this) eser Ember 2.3+ yılında, ondan önceki yerine this.get('container') kullanabilirsiniz.

+0

Her zaman arama maliyetli bir işlem olabilir, bu nedenle cevabınızı bu [link] dosyasında verilen grapho öneri ile güncelleyin. https://gist.github.com/grapho/dfa357c63ab3b6c87970d0804a49efd4) – kumkanillam

+0

Çok iyi bir nokta, teşekkürler. – DuBistKomisch

0

Kor 1.13:

başka servis denilen yönlendirme oluşturun: Sonra yapabilirsiniz

import Ember from 'ember'; 

export default Ember.Service.extend({ 
    _router: null, 

    init() { 
     this._super(); 

     this.set('_router', this.get('container').lookup('router:main')); 
    }, 

    transitionTo() { 
     this.get('_router').transitionTo(...arguments); 
    } 
}); 

:

routing: Ember.inject.service(), 

goSomewhere() { 
    this.get('routing').transitionTo('index'); 
} 
İlgili konular