2013-01-17 8 views
15

से एक्सेस करना नियंत्रकों मैं मैं नियंत्रकों के एक जोड़े कैसे प्रारंभ और उन्हें विश्व स्तर पर उपलब्ध करवा सकता हूं ember.js-pre3 एंबर-डेटा संशोधन 11.अन्य नियंत्रकों

का उपयोग कर एक परियोजना प्रबंधन एप्लिकेशन बनाने रहा हूँ। उदाहरण के लिए मेरे पास एक मौजूदा यूज़र नियंत्रक और उपयोगकर्ता नियंत्रक है कि मुझे हर राज्य में पहुंच की आवश्यकता है। मेरे पास Ember.ready फ़ंक्शन में निम्न कोड होता था लेकिन यह अब काम नहीं करता है। मुझे लगता है कि जिस तरह से मैं कर रहा था यह डीबगिंग के लिए था। https://github.com/emberjs/ember.js/issues/1646

पुराना रास्ता:

window.Fp = Ember.Application.create 
    ready:() -> 

    # Initialize Global collections 
    appController = @get 'router.applicationController' 
    store = @get 'router.store' 

    # User controller sets usersController binding on applicationController 
    # fetches all team users from server 
    # json returned from server includes flag "isCurrent" 
    usersController = @get 'router.usersController' 
    usersController.set 'content', store.findAll(Fp.User) 
    appController.set 'usersController', usersController 

    # CurrentUserController 
    # sets currentUserController binding on applicationController 
    # finds currentUser from usersController 
    currentUserController = @get 'router.currentUserController' 
    currentUserController.set 'content', usersController.get('findCurrentUser') 
    appController.set 'currentUserController', currentUserController 

    @_super() 

क्या सभी आवेदन राज्यों में currentUser नियंत्रक का उपयोग करने की उचित तरीका है।

उत्तर

30

एम्बर (एम्बर-1.0.0-pre.3.js) के नवीनतम संस्करण में आप नियंत्रक निर्भरताओं की घोषणा करके ऐसा कर सकते हैं। एक बार निर्भरता घोषित हो जाने के बाद, यह controllers संपत्ति के माध्यम से पहुंचा जा सकेगा। उदाहरण के लिए:

window.App = Ember.Application.create(); 
App.ApplicationController = Ember.Controller.extend({ 
    needs: ['currentUser', 'users'] 
}); 
App.CurrentUserController = Ember.ObjectController.extend({ 
    content: 'mike' 
}); 
App.UsersController = Ember.ArrayController.extend({ 
    content: ['mike', 'jen', 'sophia'] 
}); 

के बाद से ApplicationController जरूरत currentUser और उपयोगकर्ताओं, उन नियंत्रकों से सुलभ हैं के माध्यम से इसे controllers संपत्ति है और आवेदन टेम्पलेट के भीतर से इस्तेमाल किया जा सकता: http://jsfiddle.net/mgrassotti/mPYEX/

:

<script type="text/x-handlebars"> 
    <p>Signed in as {{controllers.currentUser.content}}</p> 
    <h2>All Users:</h2> 
    <ul> 
    {{#each user in controllers.users}} 
    <li> {{user}} </li> 
    {{/each}} 
    </ul> 
</script> 

यहाँ एक काम कर उदाहरण दिया गया है

कुछ उदाहरणों के लिए https://github.com/emberjs/ember.js/blob/master/packages/ember-application/tests/system/controller_test.js देखें

संबंधित मुद्दे