2012-09-26 14 views
8

मैं emberjs फॉर्म trek.github.com सीख रहा हूं। उस ट्यूटोरियल में Em.ObjectController और Em.ArrayController दोनों का उपयोग किया गया था। और Em.Controller भी है।ऑब्जेक्ट कंट्रोलर और ऐरे कंट्रोलर

मुझे उनका उपयोग करने में उलझन में है, मुझे लगता है कि Em.ObjectController एकल ऑब्जेक्ट के लिए है, Em.ArrayController सरणी के लिए है और Em.Controller केवल एप्लिकेशन नियंत्रक के लिए है।

क्या इसका उपयोग करने के लिए कोई धन्य नियम है?

उत्तर

13

आमतौर पर, यदि आपका नियंत्रक आइटम की एक सूची का प्रतिनिधित्व करता है, तो आप Ember.ArrayController का उपयोग करेंगे, और यदि नियंत्रक एक आइटम का प्रतिनिधित्व करता है, तो आप Ember.ObjectController का उपयोग करेंगे। निम्नलिखित की तरह कुछ:

MyApp.ContactsController = Ember.ArrayController.extend({ 
    content: [], 
    selectedContact: null 
}); 

MyApp.SelectedContactController = Ember.ObjectController.extend({ 
    contentBinding: 'contactsController.selectedContact', 
    contactsController: null 
}); 
फिर अपने Ember.Router (यदि आप उन्हें का उपयोग करें), आप connectOutlets समारोह के अंदर दो से जोड़ेगी में

:

connectOutlets: function(router) { 
    router.get('selectedContactController').connectControllers('contacts'); 
} 

संपादित करें: मैं कभी उपयोग नहीं किया Ember.Controller। स्रोत कोड को देखते हुए, ऐसा लगता है कि आप इसका उपयोग करना चाहेंगे यदि आप एक कस्टम नियंत्रक बना रहे हैं जो दो अन्य नियंत्रकों के साथ फिट नहीं है।

+4

मेरी समझ यह है कि आप 'एम्बर.कंट्रोलर' का उपयोग करते हैं जब नियंत्रक आपके 'ऐप। एप्लिकेशन कंट्रोलर' के मामले में प्रॉक्सी नहीं है (न ही ऑब्जेक्ट के लिए और न ही किसी सरणी के लिए)। – dechov

+0

Joachim pauldechov आपके सटीक उत्तर के लिए धन्यवाद! अब मैं उनके अंतर को जानता हूं। – xnjiang

0

सामान्य नियम यह है कि यह मार्ग से मॉडल पर निर्भर करता है।

यदि मॉडल एक सरणी है तो आपको ArrayController का उपयोग करना चाहिए। यह आपको भविष्य में आसान तरीके से सॉर्टिंग या फ़िल्टरिंग में लागू करने की अनुमति देगा। ArrayController आमतौर पर ऑब्जेक्ट कंट्रोलर कनेक्ट कर रहा है।

जब आपका मॉडल एम्बर ऑब्जेक्ट का उदाहरण है तो आपको ऑब्जेक्ट कंट्रोलर का उपयोग करना चाहिए। यह तब होता है जब आप उदाहरण एम्बर डेटा के लिए उपयोग कर रहे हैं। ऑब्जेक्ट कंट्रोलर के साथ आप सीधे मॉडल गुणों तक पहुंच सकते हैं। आपको प्रत्येक बार model.property लिखना नहीं है।

App.ApplicationRoute = Ember.Route.extend({ 
    model: function() { 
     return Ember.Object.create({name: 'Mathew'}); 
    } 
}); 

My name is {{name}} 

अंत में, जब एक मॉडल नहीं है वहाँ एक आदर्श स्थिति सिर्फ Ember.Controller उपयोग करने के लिए है। यह ऑब्जेक्ट कंट्रोलर के रूप में मॉडल गुणों तक सीधे पहुंच की अनुमति नहीं दे रहा है।

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