2012-05-09 22 views
5

इसलिए मुझे हाल ही में Em.TextField में अक्षम विशेषता मिली है, हालांकि मैं अक्षम फ़ाइल प्रॉपर्टी सेट के साथ इसे विस्तारित करने के बाद टेक्स्टफिल्ड को फिर से सक्षम नहीं कर सकता।एम्बरजेस - टेक्स्टफिल्ड को अक्षम और सक्षम करें

var app = Em.Application.create(); 
app.randomObj = Em.Object.create({ 
    temp: null 
}); 
app.textField = Em.TextField.extend({ 
    valueBinding: 'app.randomObj.temp', 
    disabled: true 
}); 

मैं एम्बर के साथ अक्षम संपत्ति को कैसे हटा सकता हूं?

+0

मुझे यकीन नहीं है कि जब आप इस प्रश्न को पोस्ट करते हैं तो वापस क्या था, लेकिन किसी भी नियंत्रक बाइंडिंग के बिना अक्षम संपत्ति को दृश्य में परिभाषित करना निश्चित रूप से संभव है। – asaf000

उत्तर

7

आपके नमूना कोड के साथ कुछ समस्याएं हैं, मैं प्रत्येक को संबोधित करूंगा और आशा करता हूं कि मैं कुछ चीजों को साफ़ कर सकता हूं।

कन्वेंशन

नामकरण सबसे पहले आप Emberist पर एक नजर है चाहिए पोस्ट naming conventions के बारे में: कक्षा अपरकेस और लोअरकेस उदाहरणों नाम दिया जाना चाहिए - अनुप्रयोगों और नामस्थान के लिए अपवाद। तो आपके comment में आपके प्रदत्त JSFiddle में यह App.controller और App.ATextField है।

अनुप्रयोग वैश्विक चर

आप एक Ember.Application का उदाहरण बनाकर और var app को यह बताए जाते हैं के रूप में की घोषणा। हालांकि वैश्विक चर का उपयोग करते समय आपको सावधान रहना चाहिए, इस मामले में आपको अपने एप्लिकेशन को वैश्विक नामस्थान पर परिभाषित करना चाहिए, इसलिए यह App = Ember.Application.create(); क्रमशः window.App = Ember.Application.create(); होना चाहिए। ऐप को वैश्विक चर के रूप में घोषित करके, आप अपने टेम्पलेट्स और अपने जेएस कोड में शक्तिशाली बाइंडिंग सुविधा का उपयोग कर सकते हैं।

बाइंडिंग

बाइंडिंग वर्गों पर उदाहरणों पर घोषित किया जाना चाहिए और नहीं। इसका मतलब है कि आप अपनी कक्षा परिभाषा में App.TextField के valueBinding को परिभाषित नहीं करेंगे बल्कि इसे ठोस उदाहरण में ले जाएं, उदाहरण के लिए टेम्पलेट में।

आपके comment में आपके प्रदत्त JSFiddle में नियंत्रक के लिए बाध्यकारी काम नहीं करता है क्योंकि आप एक का उपयोग नहीं करते हैं: किसी विशिष्ट नियंत्रक/ऑब्जेक्ट/को बाध्यकारी बनाने के लिए ... आपको संपत्ति का नाम घोषित करना होगा आप Binding स्ट्रिंग को बांधना और जोड़ना चाहते हैं। तो यह disabledBinding: 'App.controller.shouldDisable' होगा।


उदाहरण

मैं अपने कोड पुनर्संशोधित किया है, http://jsfiddle.net/pangratz666/pLpKV/ देखें:

Handlebars:

{{view Ember.TextField 
    valueBinding="App.tempObj.hold" 
    disabledBinding="App.controller.shouldDisable"}} {{App.tempObj.hold}} 

जावास्क्रिप्ट:

App = Em.Application.create(); 

App.controller = Em.Object.create({ 
    shouldDisable: true 
}); 

App.tempObj = Em.Object.create({ 
    hold: "initial value" 
}); 

// just to illustrate how to define bindings outside of templates, 
// we're adding a TextField with bindings setup the same as for the 
// template 
Ember.TextField.create({ 
    valueBinding: 'App.tempObj.hold', 
    disabledBinding: 'App.controller.shouldDisable' 
}).appendTo('body'); 
+0

वाह, यह मेरी अपेक्षा से अधिक है। वास्तव में मेरी समस्याओं को समझाने के लिए समय निकालने के लिए धन्यवाद, मैं वास्तव में इसकी सराहना करता हूं। – mlienau

2

इसे एक नियंत्रक से बांधें, और आप इसे इच्छानुसार टॉगल कर सकते हैं। अक्षम एक बाध्य विशेषता है, इसलिए जब संपत्ति बदलती है, तो टेम्पलेट अपडेट हो जाएगा।

+0

जब मैं इसे नियंत्रक से बांधता हूं तो मुझे HTML ' 'संपादित करें: एक जोड़ा गया [fiddle] (http://jsfiddle.net/RPWnX/) – mlienau

+1

आप इस मामले में' बाध्यकारी '' अक्षम बाइंडिंग 'में समाप्त होने वाली एक अलग संपत्ति में बाध्यकारी पथ डालते हैं। –

+0

अब काम करता है धन्यवाद! – mlienau

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