2013-06-02 17 views
23

Genel bir değişken kullanmam gerekiyor (kullanıcı bağlamı, tüm kodlardan erişilebilir) Bu konuyla ilgili bazı yayınları okudum ama açık bir cevabım yok. o Uygulama nesnesinde CurrentUser küresel değişkeni ayarlamak için iyi bir uygulamaHerhangi bir uygulama denetleyicisinden global bir değişkene erişme

App = Ember.Application.create({ 
    LOG_TRANSITIONS: true, 
    currentUser: null 
}); 
  1. mi?
  2. Uygulamada kullanılan tüm kontrol cihazlarından currentUser özelliğini nasıl güncelleyebilir ve erişebilirim? o Uygulama nesnesinde CurrentUser küresel değişkeni ayarlamak için iyi bir uygulama

cevap

58

mi?

Hayır, bu iyi bir uygulama değildir. Global değişkenleri kullanmaktan kaçınmalısınız. Çerçeve bunu mümkün kılmak için çok şey yapar - kendinizi global bir değişken olarak düşünürseniz en iyi çözüm, bir şeyin yeniden gözden geçirilmesi gerektiğini gösteren bir işarettir. Çoğu durumda doğru yer kontrolördedir. Örneğin, CurrentUser olabilir:

//a property of application controller 
App.ApplicationController = Ember.Controller.extend({ 
    currentUser: null 
}); 

//or it's own controller 
App.CurrentUserController = Ember.ObjectController.extend({}); 

Nasıl güncellemek ve uygulamada kullanılan tüm kontrolörler gelen CurrentUser özelliğine erişmek için?

needs özelliğini kullanın. CurrentUser uygulamasını ApplicationController özelliği olarak bildirdiğinizi varsayalım. Böyle PostsController ulaşılabilir:

App.PostsController = Ember.ArrayController.extend{(
    needs: ['application'], 
    currentUser: Ember.computed.alias('controllers.application.currentUser'), 
    addPost: function() { 
    console.log('Adding a post for ', this.get('currentUser.name')); 
    } 
)} 

sadece yerel denetleyicisi üzerinden erişilebilir hale getirmek için needs kullanın görünümü/şablondan CurrentUser erişmeniz gerekiyorsa. Ve bir rotadan ona ihtiyacınız varsa, rotanın controllerFor yöntemini kullanın.

+0

Bazı uygulama düzeyinde boole özellikleri var ve bu özellikler hemen hemen tüm görünümlerde/şablonlarda kullanılacaktır. Eğer onları "applicationController" içinde tanımlarım varsa, o zaman tüm kontrollerde 'needs' özelliği tanımlamak zorundayım. Onları App içinde tanımlarım ve sonra 'ihtiyaç' gerekmiyor. Bunun hakkında bir fikrin var mı? – Manoharan

+1

Uygulama düzeyinde birkaç boolean özelliğini ayarlamak için bir argüman görebiliyorum, çünkü imber kendisi LOG_TRANSITIONS'ı tanımlar. Daha karmaşık bir şey, kendi kontrolöründe bulunmalıdır. Bir denetleyicinin diğerlerinde bulunmasını istediğiniz bir durumdaysanız, diğerlerine enjekte etmek için bir başlatıcı kullanabilirsiniz. "CurrentUserController" öğesini tüm denetleyicilerin 'currentUser' özelliği olarak kullanan bir örnek için http://mcdowall.info/posts/ember-application-initializers/ adresine bakın. ConfigController ile kolayca yapılabilir. –

+1

Ember.Computed Ember.computed – Nath

İlgili konular