के रूप में काम करने के लिए एम्बर बाइंडिंग नहीं मिल सकता है, मैं emberjs.com पर documentation का पालन कर रहा हूं, लेकिन काम करने के लिए पहले बाइंडिंग उदाहरण नहीं मिल सकता है।दस्तावेज
मैंने प्रदर्शित करने के लिए jsfiddle बनाया। मैं क्या खो रहा हूँ?
के रूप में काम करने के लिए एम्बर बाइंडिंग नहीं मिल सकता है, मैं emberjs.com पर documentation का पालन कर रहा हूं, लेकिन काम करने के लिए पहले बाइंडिंग उदाहरण नहीं मिल सकता है।दस्तावेज
मैंने प्रदर्शित करने के लिए jsfiddle बनाया। मैं क्या खो रहा हूँ?
एम्बर.जेएस बाइंडिंग, पर्यवेक्षकों आदि को अनुमति देने के लिए रनलूप की अवधारणा का उपयोग करता है।
उदाहरण के साथ समस्या यह है कि एक (बाध्य) संपत्ति सेट करके और तुरंत console.log
के माध्यम से मूल्य प्राप्त करने से कोई ईवेंट निकाल दिया जाता है जो RunLoop को ट्रिगर करेगा और इसलिए परिवर्तनों को सिंक्रनाइज़ करेगा। RunLoop के बारे में 2 उत्कृष्ट ब्लॉग पोस्ट हैं: Part 1 और Part 2। हालांकि वे Sproutcore को लक्षित करते हैं, अवधारणा Ember.js के लिए समान है।
अपना उदाहरण काम करने के दो तरीके हैं।
के माध्यम सेEmber.run.sync()
डॉक्स राज्य के रूप में
सेना तुल्यकालन, Ember.run.sync()
लागू ... सिंक करने के लिए तुरंत आवेदन में सभी बाइंडिंग के लिए मजबूर करने के लिए एक उपयोगी तरीका है। इस पत्ते इस तरह कोड, देख http://jsfiddle.net/pangratz666/cwR3P/
App = Ember.Application.create({});
App.wife = Ember.Object.create({
householdIncome: 80000
});
App.husband = Ember.Object.create({
householdIncomeBinding: 'App.wife.householdIncome'
});
// force bindings to sync
Ember.run.sync();
console.log(App.husband.get('householdIncome')); // 80000
// Someone gets raise.
App.husband.set('householdIncome', 90000);
// force bindings to sync
Ember.run.sync();
console.log(App.wife.get('householdIncome')); // 90000
या दूसरा विकल्प है ...
एक दृश्य
एक दृश्य में गुण दिखा में मानों दिखाएँ आपके लिए सभी रनलूप सामग्री को संभालती है, देखें http://jsfiddle.net/pangratz666/Ub97S/
जावा स्क्रिप्ट:
App = Ember.Application.create({});
App.wife = Ember.Object.create({
householdIncome: 80000
});
App.husband = Ember.Object.create({
householdIncomeBinding: 'App.wife.householdIncome'
});
// invoke function in 3000ms
Ember.run.later(function() {
// someone gets a raise
App.husband.set('householdIncome', 90000);
}, 3000);
Handlebars (देखें):
<script type="text/x-handlebars" >
Wifes income: {{App.wife.householdIncome}}<br/>
Husbands income: {{App.husband.householdIncome}}
</script>
दृष्टि से
एम्बर के रन लूप को आपके लॉग विवरणों से पहले सिंक करने का मौका देने के लिए आपको अपनी बाइंडिंग सेट करने के बाद Ember.run.sync();
पर कॉल करने की आवश्यकता होगी। एम्बर के साथ परीक्षण के लिए यह एक आसान तकनीक है, लेकिन आम तौर पर एम्बर ऐप्स में इसकी आवश्यकता नहीं होती है।
, हम भी Ember.run.sync() का उपयोग कर सकते हैं, लेकिन केवल एक कॉल तो आवश्यक है। http://jsfiddle.net/akLVy/10/ –
अच्छी तरह से किया गया, क्लेमेंस - बहुत उपयोगी! मुझे लगता है कि हमें दस्तावेज़ों में इसे बेहतर तरीके से समझाने की जरूरत है। यह शुरुआती लोगों के लिए एक अच्छा परिचय नहीं है जब उदाहरणों में से एक "जैसा है" नहीं चलता है। –
धन्यवाद! दान, मैं पूरी तरह से सहमत हूँ। इसे दस्तावेज़ों में अपडेट करने की आवश्यकता है! – pangratz