अस्वीकरण: नीचे दिखाए गए सभी तकनीक पिछले कुछ महीनों से एम्बरजेएस के साथ मेरा अनुभव हैं, साथ ही साथ मेरे सहयोगियों के साथ कुछ चर्चाएं भी हैं। कुछ भी गलत है, कृपया अपनी आवाज़ उठाएं। हम सभी सीखने के चरण में हैं (और ember.js दस्तावेज़ maxxx को बेकार है, तो दयालु हो;)
वर्तमान में मेरे कार्यस्थल में दो डेवलपर हैं जो Ember.js का उपयोग कर रहे हैं। हम एक निष्कर्ष पर पहुंचे कि वैश्विक ApplicationController
में वैश्विक चर संग्रहीत करना एप्लिकेशन नामस्थान में संग्रहीत करने से कहीं बेहतर है। ऐसा इसलिए है क्योंकि यदि यह एप्लिकेशन नामस्थान में संग्रहीत है तो इस मान की पुनर्प्राप्ति बहुत गन्दा हो सकती है। और यह भी बंद होने में अच्छी तरह से काम करता है, और इसलिए वैश्विक नामस्थान साफ (और अपेक्षाकृत हैक मुक्त) बनाते हैं। आप नहीं चाहते हैं कि आपका उपयोगकर्ता App.set
को वैरिएबल दाएं गड़बड़ के साथ करे?
यह 1.0.0 प्री -4 पर आधारित है।
आप को ध्यान में रखते इस currentUserId
वैश्विक चर
नाम स्थान में भंडारण की है। jsFiddle demo
(function() {
function r() {
return Math.round(Math.random()*999);
}
var MyApp = Ember.Application.create({
currentUserId: null,
ready: function() {
//demo purpose.
this.set('currentUserId', r());
},
rootElement: '#demo'
});
MyApp.ApplicationView = Ember.View.extend({
templateName: 'application-view',
//Direct child view
innerView: Ember.View.extend({
templateName: 'inner-view',
setValue: function() {
this.set('controller.namespace.currentUserId', r());
}
}),
//Direct child view, but with a controller attached
innerViewWithController: Ember.View.extend({
controller: Ember.Controller.create(),
templateName: 'inner-view-with-controller',
setValue: function() {
this.set('parentView.controller.namespace.currentUserId', r());
}
}),
getValue: function() {
alert(this.get('controller.namespace.currentUserId'));
},
setValue: function() {
this.set('controller.namespace.currentUserId', r());
}
});
})();
में वैश्विक ApplicationController
jsFiddle demo
(function() {
function r() {
return Math.round(Math.random()*999);
}
var MyApp = Ember.Application.create({
ApplicationController: Ember.Controller.extend({
currentUserId: null,
init: function() {
//demo purpose
this.set('currentUserId', r());
}
}),
rootElement: '#demo'
});
MyApp.ApplicationView = Ember.View.extend({
templateName: 'application-view',
//Direct child view
innerView: Ember.View.extend({
templateName: 'inner-view',
setValue: function() {
this.set('controller.currentUserId', r());
}
}),
//Direct child view, but with a controller attached
innerViewWithController: Ember.View.extend({
controller: Ember.Controller.create(),
templateName: 'inner-view-with-controller',
setValue: function() {
this.set('parentView.controller.currentUserId', r());
}
}),
getValue: function() {
alert(this.get('controller.currentUserId'));
},
setValue: function() {
this.set('controller.currentUserId', r());
}
});
})();
नोट भंडारण बनाम कि:
आप नाम स्थान में स्टोर करने के लिए चुना है, तो आप के माध्यम से इसे उपयोग करने की आवश्यकता होगी रूट नियंत्रक हर समय, तो यह वास्तव में भंडारण के समान ही है एक अतिरिक्त namespace
कीवर्ड के साथ एप्लिकेशन नियंत्रक।
आप, जड़ applicationController
में संग्रहीत करना जो कुछ भी देखा गया है कि applicationView
के वंशज हैं, आप आसानी से चर अपने टेम्पलेट में {{variableName}}
के साथ किसी भी डॉट traversals बिना उपयोग कर सकते हैं के लिए चुना है। डिफ़ॉल्ट रूप से Ember.Js नियंत्रकों के माध्यम से चर के लिए देखो।
सबसे खराब मामले में, यदि आपके आंतरिक दृश्य को अपने स्वयं के नियंत्रक की आवश्यकता है, तो रूट नियंत्रक (या नामस्थान) के माध्यम से वैश्विक चर का उपयोग करना थोड़ा अधिक दर्दनाक है क्योंकि नियंत्रक जुड़े नहीं हैं, आपको अपने विचारों को पार करने की आवश्यकता होगी जब तक आप रूट नियंत्रक नहीं देखते हैं। Ember.JS में, डिफ़ॉल्ट रूप से सभी विचारों में नियंत्रक सेट होगा, और डिफ़ॉल्ट रूप से, माता-पिता का नियंत्रक होगा। जिसका अर्थ है कि यदि आप कभी भी नियंत्रक निर्दिष्ट नहीं करते हैं, तो सभी वंशज विचार वास्तव में रूट नियंत्रक से जुड़े होते हैं। इस समस्या को दूर करने के लिए, आप परिवर्तनीय बाध्यकारी नियंत्रक में आसानी से ट्रैवर्सिंग कुरूपता को हल करने के लिए कर सकते हैं।
मैं तुम्हें वैश्विक window
वस्तु में इस तरह के एक महत्वपूर्ण चर डाल करने के लिए के रूप में यह आसानी से उपयोगकर्ता द्वारा संशोधित किया जाएगा (और किसी भी संभावित मुद्दों को उठाती है) का सुझाव नहीं है। एंबर आवेदन नाम स्थान में ग्लोबल नेम स्पेस में यह लाना संभावित मुद्दा कम कर देता है, लेकिन नहीं है अगर आप इसे वैश्विक
मेरे 2 सेंट बनाने;)
स्रोत
2013-02-13 04:24:37
कम से कम एक 'User' वस्तु' में window.user = के रूप में इस्तेमाल करते हैं। ..'। – Reactormonk
आप अपने आवेदन उदाहरण में उस राज्य को स्टोर कर सकते हैं। ऐप = Ember.Aplication.create ({currentUser: null})। जब आप तैयार हों तो उपयोगकर्ता को App.set ("उपयोगकर्ता", उपयोगकर्ता) के साथ सेट करें। – mavilein
मैं अपने ऐप में कुछ केंद्रीय राज्य स्टोर करता हूं और यह ठीक काम करता है। यह थोड़ा गंध है, लेकिन यह मेरे लिए व्यवहार्य लगता है, अगर कोई इस दृष्टिकोण को अधिक उपयोग नहीं करता है। – mavilein